pixetto_ws_server.py

這裡提供一個範例程式,實作了以下幾個部分

  • Websocket server 主程式 (main)
  • 接收並處理 Pixetto 感測器傳送過來的影像資料 (handler)
  • 實作 ”偵測紅色物件” 的功能 (detect_red),此處可將 detect_red 置換成你所要實作的功能
  • 使用 JSON 格式傳送偵測結果給 Pixetto 感測器 (format_json)

建立一個遠端運算功能的步驟

步驟一:實作你的視覺運算功能,如人臉偵測,物件類別偵測等。此處以偵測紅色物件為例

def detect_red(frame):
    low_red = np.array([161, 155, 84])
    high_red = np.array([179, 255, 255])
    hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    red_mask = cv2.inRange(hsv_frame, low_red, high_red)
    red = cv2.bitwise_and(frame, frame, mask=red_mask)
    contours, hierarchy = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  
    return contours

步驟二:根據你的視覺運算功能回傳的偵測資料,修改 JSON 的資料輸入
需修改的欄位包括 :

  • type : 物件識別號
  • label : 物件名稱 (OPTIONAL)
  • confidence : 識別分數 (OPTIONAL)
  • x, y, w, h : 物件所在的位置和範圍

也就是 format_json() 函式中的下面四行

    a['type'] = 1
    a['label'] = "red"
    a['confidence'] = 1.0
    x, y, w, h = cv2.boundingRect(detobjs[i])

完整 format_json() 函式如下,只需修改上面四行,其餘的不要更動。

def format_json(detobjs):
	writedata = {}
	writedata['header'] = 'DETECT'
	writedata['id'] = 15
	writedata['num'] = len(detobjs)
	objs = []

	if len(detobjs) > 0:
		for i in range(len(detobjs)):
			a = {}
			a['type'] = 1
			a['label'] = "red"
			a['confidence'] = 1.0

			x, y, w, h = cv2.boundingRect(detobjs[i])
			a['x'] = x * scale
			a['y'] = y * scale
			a['w'] = w * scale
			a['h'] = h * scale
			objs.append(a)
		writedata['objects'] = objs

	writejson_str = json.dumps(writedata, sort_keys = False)
	writejson_str += ';'
	writejson_str = writejson_str.replace(" ", "")
	
	return writejson_str

步驟三:將 handler function 中呼叫 detect_red 的地方,置換成你實作的功能

async def handler(websocket, path):
    while True:
        … …
	# Call your "Detection Function" here
        detected_data = detect_red(image)
        await websocket.send(send_data)

步驟四:確認你的個人電腦或筆電有 Python 的運行環境,並安裝下面的套件

$ pip install absl-py
$ pip install websockets

步驟五:電腦連上網路後,執行此程式,並以參數 port 指定一個網路連接埠,使外部能透過此連接埠連接此服務

$ python pix_ws_server.py --port 9999

接下來設定 Pixetto 感測器連接此遠端運算服務

步驟一:將 Pixetto 感測器連接到電腦上,開啟 Pixetto Utility

步驟二:開啟 WI-FI 功能

步驟三:選擇 “遠端運算” 功能

步驟四:”遠端服務” 中選擇 “新增”,建立一個新的服務連線

步驟五:點選 “套用”,Pixetto 感測器會連線至遠端運算服務。此時,偵測結果就會呈現在影像畫面上。