# SoftwareofIndustrialCameraUsePaddle **Repository Path**: luozgang/SoftwareofIndustrialCameraUsePaddle ## Basic Information - **Project Name**: SoftwareofIndustrialCameraUsePaddle - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 本项目基于pyqt5开发,驱动两款工业相机:Basler acA2040、HIKVISION GiGE,获取图像后使用PaddleX库搭建目标检测、图像分割、图像分类功能。 ## 文件结构 ``` SoftwareofIndustrialCameraUsePaddle data: (超参数配置:类别、置信度、像素 设定) gigetype1.json gigetype2,json MVImport (GiGE相机的依赖文件) plaforms (生成exe所需库文件) software (服务依赖) UI: startwindow.py (开始界面) mainwindow_one.py (单相机主界面) mainwindow_two.py (多相机主界面) configCamera.py (相机配置界面) cameraImgs.py (用于存放相机图像的文件,可以直接import这个文件中的CameraImgs类,使用getImg方法就可以得到相机的图像。) infer.py (预测) main.py (单相机工程的入口文件,包含操作软件主界面的逻辑函数) main_one.py (多相机工程的入口文件,包含操作软件主界面的逻辑函数) openGigeCamera.py (打开GIGE相机配置界面的文件,其中包含操作相机配置界面的逻辑函数,例如:在配置界面的Combox中显示相机的列表) openUSBCamera.py (打开USB相机配置界面的文件,其中包含操作相机配置界面的逻辑函数,例如:在配置界面的Combox中显示相机的列表) start.py (启动主程序) visualizeimg.py (可视化) ``` ## 运行方法 - 本项目支持单相机、多相机两种模式可供选择。 ```bash # 安装依赖 cd ./SoftwareofIndustrialCameraUsePaddle pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple ``` ```python # 启动主程序 python start.py ```
- 单机此操作界面按钮进入主界面,主界面中两个下拉列表可供选择相机品牌(海康相机/Basler相机)及序号。
- 相机配置参数
## 代码简介 - 打开相机显示图片的函数:`openGigeCamera.py` ```python def open_camera(self): self.thread_camera = threading.Thread(target=self.showImgThread) self.thread_camera.start() ``` - 加载模型:`infer.py` ```python def loadmodel1(self): with open("./data/gigetype1.json",'r',encoding='utf8') as fp: modelconfigs = json.load(fp) gige1modelPath= modelconfigs['model_path'] if(not gige1modelPath== ''): self.model_gige1= pdx.load_model(gige1modelPath) def loadmodel2(self): with open("./data/gigetype2.json",'r',encoding='utf8')as fp: modelconfigs = json.load(fp) gige2modelPath= modelconfigs["model_path"] if(not gige2modelPath== ''): self.model_gige2= pdx.load_model(gige2modelPath) ``` - 设置显示识别结果:`cameraImgs.py` ```python @staticmethod def setInferImg(flag,img): ''' :param flag: 3->usb的图 1->gige1 2-> gige2 :return: None ''' if flag == 3: CameraImgs.USBCameraInferImg = img elif flag == 1: CameraImgs.GIGECameraInferImg_1 = img elif flag == 2: CameraImgs.GIGECameraInferImg_2 = img @staticmethod def getInferImg(flag): if flag == 3: return CameraImgs.USBCameraInferImg elif flag == 1: return CameraImgs.GIGECameraInferImg_1 elif flag == 2: return CameraImgs.GIGECameraInferImg_2 @staticmethod def setinfer_flag1(flag1): CameraImgs.infer_flag1=flag1 @staticmethod def setinfer_flag2(flag2): CameraImgs.infer_flag2=flag2 @staticmethod def getinfer_flag1(): return CameraImgs.infer_flag1 @staticmethod def getinfer_flag2(): return CameraImgs.infer_flag2 ``` - confidence和bbox大小的限定部分代码:`bisualizeimg` ```python default_font_size = max(np.sqrt(height * width) // 90, 10 // scale) linewidth = max(default_font_size / 4, 1) labels = list() for dt in np.array(results): if dt['category'] not in labels: labels.append(dt['category']) color_map = get_color_map_list(256) keep_results = [] areas = [] if cameratype =="gige1": with open("./data/gigetype1.json",'r',encoding='utf8')as fp: modelconfigs = json.load(fp) elif cameratype =="gige2": with open("./data/gigetype2.json",'r',encoding='utf8')as fp: modelconfigs = json.load(fp) threshold = 0.5 pix_w = 0 pix_h = 0 for dt in np.array(results): cname, bbox, score = dt['category'], dt['bbox'], dt['score'] for i in range(0,len(modelconfigs)): if cname in modelconfigs['confidence_set_pix'][i]['cname']: threshold = modelconfigs['confidence_set_pix'][i]['confidence'] pix_w = modelconfigs['confidence_set_pix'][i]['set_pix_w'] pix_h = modelconfigs['confidence_set_pix'][i]['set_pix_h'] break if score < threshold: continue if bbox[2]< pix_w or bbox[3]