esp32cam初始化摄像头ov2640后就可以拍摄图像,但是esp32cam拍摄的图像需传送到电脑才能看到具体图像。(虽然esp32cam拍摄的图像可以保存到自带的SD卡中,但无法及时看到结果)
网上找到了一个程序,有esp32cam端arduino代码和电脑端python代码,esp32cam端在loop中循环读取电脑端通过串口发来的字符指令,根据不同的字符分别进行摄像头初始化、拍照、串口发送图像数据、关闭摄像头等操作。电脑端的程序通过串口发送初始化、拍照字符指令,并读取串口传递的图像数据。
程序链接地址:esp32cam_serial_camera ,目录中main.py通过串口发送操作指令字符、读取串口图像数据、保存图像文件。serialCamArduino初始化相机、拍照、发送图像数据。
需要注意的地方
1、esp32cam串口默认速率是115200,程序中将两端的串口速率设置在500000,本人的电脑在调测中出现arduino ide 无法连接esp32cam的串口情况,不得不都设置为115200;
2、本人的电脑和操作系统可能比较老旧,串口传递的较慢,还会出现类似阻塞的情况,main.py中为time.sleep(0.001)时经常无法读到数据,也不得不增大sleep时间。
原main.py是将获取的图像以jpg文件存在电脑中,为了更直观,本人在程序中增加了直接显示的功能,将图像显示在一个独立窗口中。
import cv2 在程序头部增加引用cv2库,没有的需要安装; ------------------------------------------- img = take_a_photo(cam) save_photo(img) 在拍照和存文件后,增加如下 wimg = cv2.imdecode(np.frombuffer(img, dtype=np.uint8), cv2.IMREAD_COLOR) 将图像数据编码win_name = 'real_img' cv2.namedWindow(win_name, cv2.WINDOW_NORMAL) cv2.imshow(win_name,wimg) 显示图像 cv2.waitKey() 等待键盘鼠标的操作,这里是任何键盘操作,或者直接用鼠标关闭窗口 cv2.destroyAllWindows()
这个程序主要意义是学习相关知识,实际上图像数据量较大,串口稳定性和速度都不太理想。