def dispenseImage(self,frame,address):
#分发图片到指定的地址
if frame is None:
return
try:
#将brg图像转化为rgb图像,工具类中有封装
self._sock.sendto(IOUtil.array_to_bytes(frame[…,::-1]),address)
except Exception as e:
logger.error(“分发器错误:”+str(e))
def dispenseCommand(self,command,address):
if command is None:
return
try:
self._sock.sendto(bytes(command),address)
except Exception as e:
raise Exception(e)
def close(self):
self._sock.close()
2.主控程序编写,python的多线程模块无法优化CPU密集型任务,但在后期会用多进程对程序进行优化,所以目前使用类似的多线程模式
#encoding=utf-8
import cv2
from managers import CameraManager
from transmitters import Dispatcher
from threading import Thread
from settings import *
import time
import copy
import multiprocessing
from utils import IOUtil,logger
‘’’
主控程序
‘’’
class Camera(object):
#主控程序
def init(self,captureManager = None,dispatcher = None,isShow=True):
‘’’
:param captureManager: 视屏采集器
:param dispatcher:信息分发器
‘’’
logger.info(“主控程序初始化…”)
self.captureManager = captureManager if captureManager is not None else CameraManager(cv2.VideoCapture(0))
self.dispatcher = dispatcher if dispatcher is not None else Dispatcher()
#是否开启图像分发
self.isDispense = True
#是否在本地显示
self.isShow = isShow
#是否开启预警
self.isWarning = True
#item为预警器处理后的图像以及坐标信息
#原始图像
self.frame = None
logger.info(“主控程序初始化完毕…”)
def _dispatch(self):
#信息分发线程
logger.info(“是否开启图片分发:”+str(self.isDispense))
while self.isDispense:
try:
self.dispatcher.dispenseImage(self.frame,(IMAGE_IP,IMAGE_PORT))
except EOFError as e:
print(e)
def run(self):
logger.info(“\n################################################################”)
self.startDispatch()
self.captureManager.start()
time.sleep(1)
while self.captureManager.isWorking():
self.frame = self.captureManager.getFrame()
if self.frame is None:
continue
if self.isShow and self.frame is not None:
cv2.imshow(“show”,self.frame)
keycode = cv2.waitKey(1)
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!