【DigiKey“智造万物,快乐不停”创意大赛】4,人脸识别在Pi400上的实现
[复制链接]
本帖最后由 eew_dy9f48 于 2024-1-5 08:19 编辑
实现人脸识别我们使用的工具是ultralytics。Ultralytics安装非常简单,只需要pip install ultralytics即可。唯一需要注意的是我们需要更换一下pytorch的版本,否则会出现Segmentation fault
- ···
-
- pip uninstall torch torchvision
-
- pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
-
- ···
完成安装后,我们要使用stream的方法,从网络推流中获取到视频流。视频流来源是我们一开始制作的ESP32 S2 CAM开发板。开发板上烧录的是arduino ide上的官方CameraWebServer例程。除了常规的选择对应开发板并修改wifi信息外,我们还需要自定义一下开发板引脚。假设我们这里选择#define CAMERA_MODEL_ESP32S2_CAM_BOARD,那么我们要把camera_pins.h中的对应部分改成:
- ···
-
- #elif defined(CAMERA_MODEL_ESP32S2_CAM_BOARD)
-
- #define PWDN_GPIO_NUM -1
-
- #define RESET_GPIO_NUM -1
-
- #define XCLK_GPIO_NUM 2
-
- #define SIOD_GPIO_NUM 42
-
- #define SIOC_GPIO_NUM 41
-
-
-
- #define Y9_GPIO_NUM 1
-
- #define Y8_GPIO_NUM 3
-
- #define Y7_GPIO_NUM 4
-
- #define Y6_GPIO_NUM 6
-
- #define Y5_GPIO_NUM 8
-
- #define Y4_GPIO_NUM 14
-
- #define Y3_GPIO_NUM 9
-
- #define Y2_GPIO_NUM 7
-
- #define VSYNC_GPIO_NUM 16
-
- #define HREF_GPIO_NUM 15
-
- #define PCLK_GPIO_NUM 5
-
-
-
- #define LED_GPIO_NUM 45
-
- ···
按照下图所示配置进行烧录即可。
Pi400这边的代码比较简单,ultralytics已经被设计的非常易于使用。
- ···
-
- from ultralytics import YOLO
-
- import requests
-
- import time
-
- url = "http://192.168.8.171"
-
- model = YOLO("yolov8n.pt")
-
- requests.get(url+"/control?var=framesize&val=" + str(8))
-
- results = model.predict(url+":81/stream", stream=True, show=True, conf = 0.5)
-
- for result in results:
-
- for box in result.boxes:
-
- class_id = result.names[box.cls[0].item()]
-
- cords = box.xyxy[0].tolist()
-
- cords = [round(x) for x in cords]
-
- conf = round(box.conf[0].item(), 2)
-
- print("Object type:", class_id)
-
- print("Coordinates:", cords)
-
- print("Probability:", conf)
-
- print("---")
-
- ···
如果所安装的树莓派系统是桌面版本,我们在桌面版本上运行以上程序,就可以看到画面。如果是仅有terminal的系统,terminal中也会有相应信息打印。
|