# 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]