---
# System prepended metadata

title: '**2021/07/15**'
tags: [2021/07/15, 藍柏婷]

---

# **2021/07/15**
[[5 Running the Live Camera Recognition Demo "ImageNet"]](https://github.com/dusty-nv/jetson-inference/blob/master/docs/imagenet-camera-2.md)
[[6 Locating Objects with "DetectNet"]](https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-console-2.md)
[[8 Coding Your Own Object Detection Program]](https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-example-2.md)
###### tags: `藍柏婷`
###### tags: `2021/07/15`

### **==== 編寫您自己的對象檢測程序 Coding Your Own Object Detection Program ====**
 (因為鏡頭還沒送到，我先做[[8 Coding Your Own Object Detection Program]](https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-example-2.md))
先打開`gedit Text Editor`，創一個`Editor`，"my-detection_1.py"
**因為原檔有錯誤，所以要改一下!!!**
如下:
```python=
import jetson.inference
import jetson.utils

net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)	
#camera = jetson.utils.videoSource("csi://0")      # csi camera
camera = jetson.utils.videoSource("/dev/video0")      # usb camera	
display = jetson.utils.videoOutput("display://0") # 'my_video.mp4' for file

while True:
    img = camera.Capture()
    detections = net.Detect(img)
    display.Render(img)
    display.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
    if not camera.IsStreaming() or not display.IsStreaming():
        break
```
            
>```python=4
>net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)
>```
>-> 0.5是指50%以上才顯示
>
>```python=6
>camera = jetson.utils.videoSource("/dev/video0") # usb camera	
>```
>->這才是我們的鏡頭 (V4L2 camera)

就這樣!!!
執行時，先從`Desktop/scifair/image_classifiction_demo/jetson-inference/build/aarch64/bin`，進入`bin`後，直接輸入

    $ python3 my-detection_1.py
若無誤，將會顯示鏡頭，finish!
(我發現還是要鏡頭，呵呵!)

---

### **==== 運行實時攝像機識別演示 Running the Live Camera Recognition Demo ====**
(回歸昨天做的延續，呵呵!)
執行時，先從`Desktop/scifair/image_classifiction_demo/jetson-inference/build/aarch64/bin`，進入`bin`後，直接輸入
    
    $ ./imagenet.py /dev/video0 

---

### **==== 使用 DetectNet 定位對象 Locating Objects with DetectNet ====**
執行時，先從`Desktop/scifair/image_classifiction_demo/jetson-inference/build/aarch64/bin`，進入`bin`後，直接輸入

    $ ./detectnet.py  --network=ssd-mobilenet-v2  images/peds_0.jpg  images/test/output.jpg		
>-> peds_0.jpg是要改的照片

記得跑完之後要點網址才會顯示結果(ctrl+點網址)

**試著看懂這段 Source code**
```python=
import jetson.inference
import jetson.utils

import argparse
import sys

# parse the command line
parser = argparse.ArgumentParser(description="Locate objects in a live camera stream using an object detection DNN.")

parser.add_argument("input_URI", type=str, default="", nargs='?', help="URI of the input stream")
parser.add_argument("output_URI", type=str, default="", nargs='?', help="URI of the output stream")
parser.add_argument("--network", type=str, default="ssd-mobilenet-v2", help="pre-trained model to load (see below for options)")		
parser.add_argument("--overlay", type=str, default="box,labels,conf", help="detection overlay flags (e.g. --overlay=box,labels,conf)\nvalid combinations are:  'box', 'labels', 'conf', 'none'")	
parser.add_argument("--threshold", type=float, default=0.5, help="minimum detection threshold to use") 	
    
try:					
	opt = parser.parse_known_args()[0]	
except:
	print("")
	parser.print_help()
	sys.exit(0)

# load the object detection network
net = jetson.inference.detectNet(opt.network, sys.argv, opt.threshold)		

# create video sources & outputs
input = jetson.utils.videoSource(opt.input_URI, argv=sys.argv)
output = jetson.utils.videoOutput(opt.output_URI, argv=sys.argv)
	
# process frames until the user exits
while True:
	# capture the next image
	img = input.Capture()
	
	# detect objects in the image (with overlay)
	detections = net.Detect(img, overlay=opt.overlay)
	
	# print the detections
	print("detected {:d} objects in image".format(len(detections)))
	
	for detection in detections:
		print(detection)
	
	# render the image
	output.Render(img)	
	
	# update the title bar
	output.SetStatus("{:s} | Network {:.0f} FPS".format(opt.network, net.GetNetworkFPS()))
	
	# print out performance info
	net.PrintProfilerTimes()	
	
	# exit on input/output EOS
	if not input.IsStreaming() or not output.IsStreaming():	
		break
```
>```python=1
>import jetson.inference
>```
>-> = include (C++)
>
>```python=12
>parser.add_argument("--network", type=str, default="ssd-mobilenet-v2", help="pre-trained model to load (see below for options)")
>```
>-> 前有`--`代表可有可無，但是加上去可以有一些功能
>
>```python=13
>parser.add_argument("--overlay", type=str, default="box,labels,conf", help="detection overlay flags (e.g. --overlay=box,labels,conf)\nvalid combinations are:  'box', 'labels', 'conf', 'none'")
>```
>-> `--overlay` 是有"box,labels,conf"的功能
>
>```python=14
>parser.add_argument("--threshold", type=float, default=0.5, help="minimum detection threshold to use")
>```
>-> 可以把`--threshold`想成是過濾器，`default=0.5`是指大於50%再輸出
>
>```python=16
>try:
>```
>-> `try`跟`except`可以想成是一個防呆裝置，確保他可以跑出結果
>	
>```python=17
>    opt = parser.parse_known_args()[0]
>```
>-> 去上面抓現有的資料
>
>```python=23
># load the object detection network
>net = jetson.inference.detectNet(opt.network, sys.argv, opt.threshold)
>```
>->是函式庫裡的一個工具，一定要有(  ,  ,  )三格
>
>```python=44
>    # render the image
>    output.Render(img)
>```
>-> 把"box,labels,conf"跟照片合併起來
>
>```python=50
>    # print out performance info
>    net.PrintProfilerTimes()
>```
>-> 印出一些跑的時候的資料
>
>```python=53
>    # exit on input/output EOS
>    if not input.IsStreaming() or not output.IsStreaming():
>```
>-> 如果沒有input，就break