from PyQt4 import QtGui, QtCore
import uifiles.xio_all_ui as ui
import sys
import cv2
import threading
import time
import datetime
from utils.utils import Timer, MyQueue
from utils.vision import Vision
import socketserver
import time
from figure.figure_plot import *
from data import data_access
def data_deal(func): # 要接受参数就要改成三层装饰器
def wrapper(*args, **kwargs):
print('call %s():' % func.__name__)
return func(*args, **kwargs)
return wrapper
class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
action = None # 用来通知显示现在是由于什么原因导致静止
@data_deal
def handle(self):
data = str(self.request.recv(1024), 'utf-8')
# print(data)
if data == 'action1':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data == 'action2':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data == 'action3':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data == 'action4':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data == 'action5':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data == 'action6':
dz = data # 动作
da = data_access.DataAccess()
da.insert_action(dz)
action = data
elif data[0:4] == 'stop':
dz = data[4:]
da = data_access.DataAccess()
da.insert_action(dz, FLAG='end')
# 更新动作表
result = da.select_("select * from dz ORDER BY SJC DESC limit 2")
time_diff = int((result[0][0] - result[1][0]).seconds)
lossTime = data_access.EquipmentTimeData()
result_loss = lossTime.select_("select * from loss ORDER BY SJ DESC limit 1")
current_time = datetime.datetime.now().strftime('%Y-%m-%d')
time_diff = time_diff + result_loss[0][int(dz[-1])] # 此处投机
lossTime.update_('update loss set ' + dz + '=' + str(time_diff) + ' where SJ="%s"' % current_time)
action = None
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
class XioAll(QtGui.QWidget):
'''这个类为主程序类
'''
HOST = 'localhost'
PORT = 8081
TOTAL = 0
isStatic = True
action = None
pre_action = None
action_video = None # 视频内能识别
pre_action_video = None
def __init__(self):
super(XioAll, self).__init__()
self.ui = ui.Ui_Form()
self.ui.setupUi(self)
self.frame_left = None
self.frame_right = None
self.is_work = True
self.one_static_time = 0 # 一次故障静止的时间
self.all_time = 0 # 一天的工作时间
self.q = MyQueue() # 存放帧队列,改为存放状态比较好
self.vision = Vision()
# 若日期发生改变,自行插入全零数据
da = data_access.EquipmentTimeData() # 对损失项统计表进行操作
result_loss = da.select_("select * from loss ORDER BY SJ DESC limit 1")
current_time = datetime.datetime.now().strftime('%Y-%m-%d')
if str(result_loss[0][0]) != current_time:
da.update('insert into loss(SJ,action1,action2,action3,action4,action5,action6)values'
'("%s",%d,%d,%d,%d,%d,%d)' % (current_time, 0, 0, 0, 0, 0, 0))
else:
pass
da_oee = data_access.OEEData() # 对oee实时利用率进行统计
result_oee = da_oee.select_('select * from oee_date ORDER BY SJC DESC limit 1')
if str(result_oee[0][0]) != current_time:
da_oee.update_('insert into oee_date(SJC,O8,O9,O10,O11,O12,O13,O14,O15,O16,O17,O18)values'
'("' + current_time + '",0,0,0,0,0,0,0,0,0,0,0)')
else:
pass
self.thread_figure = Timer('updatePlay()', sleep_time=120) # 该线程用来每隔2分钟刷新绘图区
self.connect(self.thread_figure, QtCore.SIGNAL('updatePlay()'), self.draw)
self.thread_figure.start()
self.server = ThreadedTCPServer((self.HOST, self.PORT), ThreadedTCPRequestHandler) # 该线程用来一直监听客户端的请求
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.server_thread.start()
self.thread_video_receive = threading.Thread(target=self.video_receive_local) # 该线程用来读取视频流
self.thread_video_receive.start()
self.thread_time = Timer('updatePlay()') # 该线程用来每隔0.04秒在label上绘图
self.connect(self.thread_time, QtCore.SIGNAL('updatePlay()'), self.video_play)
self.thread_time.start()
self.thread_recog = Timer('updatePlay()', sleep_time=1) # 该线程用来每隔一秒分析图像
self.connect(self.thread_recog, QtCore.SIGNAL('updatePlay()'), self.video_recog)
self.thread_recog.start()
self.thread_data = Timer('updatePlay()', sleep_time=1800) # 该线程用来每隔半小时向数据库读取数据
self.connect(self.thread_data, QtCore.SIGNAL('updatePlay()'), self.data_read)
self.thread_data.start()
def video_receive_local(self, cam1='./videos/left_cam.mp4', cam2='./videos/right_cam.mp4', time_flag=True):
'''该方法用来接收本地视频
:param cam1: 左摄像头数据源
:param cam2: 右摄像头数据源
:param time_flag: 是否休眠,本地视频为True
:return: None
'''
self.left_cam = cv2.VideoCapture(cam1)
self.right_cam = cv2.VideoCapture(cam2)
ret_1, frame_1 = self.left_cam.read()
ret_2, frame_2 = self.right_cam.read()
while True:
self.frame_left = frame_1
self.frame_right = frame_2
if ret_1 is False:
self.left_cam = cv2.VideoCapture(cam1)
if ret_2 is False:
self.right_cam = cv2.VideoCapture(cam2)
ret_1, frame_1 = self.left_cam.read()
ret_1, frame_2 = self.right_cam.read()
if time_flag is True:
time.sleep(0.04)
def video_receive_rstp(self, cam1='rstp:', cam2='rstp:'):
'''该方法用来接收网络视频
:param cam1: 左摄像头数据源
:param cam2: 右摄像头数据源
:return: None
'''
self.video_receive_local(cam1=cam1, cam2=cam2, time_flag=False)
def video_play(self):
'''该方法用来播放视频
:return: None
'''
def label_show_left(frame, label=self.ui.label): # 左控件label播放
height, width, _ = frame.shape
frame_change = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame_resize = cv2.resize(frame_change, (360, 240), interpolation=cv2.INTER_AREA)
image = QtGui.QImage(frame_resize.data, frame_resize.shape[1], frame_resize.shape[0],
QtGui.QImage.Format_RGB888) # 处理成QImage
label.setPixmap(QtGui.QPixmap.fromImage(image))
def label_show_right(frame, label=self.ui.label_2): # 右空间Lable播放
label_show_left(frame, label)
if self.frame_left is not None:
label_show_left(self.frame_left)
if self.frame_right is not None:
label_show_right(self.frame_right)
def draw(self):
'''
展示图标
:return:
'''
def draw_fp(): # 绘制损失饼图
fp = Figure_Pie()
da = data_access.Equipmen
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于python实现的分布式综合智慧能源系统模型—最大出力预测模型源码+项目说明.zip 【项目介绍】 为有效推动能源清洁生产和就近消纳,提高整个区域能源系统的能源利用率、经济性与稳定性,达到节能环保的目的,提出了分布式智慧能源系统构架,实时识别区域能源数据并进行可视化处理,以实现区域内各类分布式能源系统进行多能互补、优化调度。 【功能实现】 1、利用以cv2为主的第三方库函数对输入图像进行降噪、归一化、区域搜索等处理。 2、基于卷积神经人工智能网络进行实时图像的处理与识别。 3、通过灰色模型、bp神经网络模型等手段进行电力系统最大出力的预测。 4、利用qt实现将各功能集成为可视化图形界面。 【环境配置】 Python 环境搭建 Qt图形用户界面开发框架 mysql数据库环境 在本项目中,在线视频和本地视频数据源的读取处理均可实现,且都要求双数据源(左右摄像头)的输入。本地视频要求MP4格式。
资源推荐
资源详情
资源评论
收起资源包目录
基于python实现的分布式综合智慧能源系统模型—最大出力预测模型源码+项目说明.zip (21个子文件)
uifiles
xio_all_ui.py 5KB
xio_playvideo_ui.py 2KB
xio_shumei_ui.py 11KB
xio_figureplot_ui.py 2KB
项目说明.md 3KB
_config.yml 26B
data
data_access.py 4KB
test.sql 15KB
utils
vision.py 6KB
utils.py 7KB
uidesign
xio_shumei.ui 10KB
xio_all.ui 4KB
xio_playvideo.ui 2KB
xio_figureplot.ui 1KB
figure
figure_plot.py 6KB
maindo
xio_figureplot.py 3KB
xio_shumei.py 3KB
xio_server.py 1KB
xio_all.py 14KB
xio_playvideo.py 4KB
question 521B
共 21 条
- 1
资源评论
- iot.py2023-02-18资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
- lively_142023-12-16资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
Make程序设计
- 粉丝: 6820
- 资源: 3575
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vscode-1.64.1.tar源码文件
- vscode-1.64.0.tar源码文件
- vscode-1.52.0.tar源码文件
- Music-Player +PlayerActivity+ rockplayer+ SeeJoPlayer 播放器JAVA源码
- vscode-1.46.0.tar源码文件
- 最近很火植物大战僵尸杂交版2.08苹果+安卓+PC+防闪退工具V2+修改工具+高清工具+通关存档整合包更新
- 超级好用的截图工具PixPin,可录制Gif图
- Screenshot_2024-05-21-17-06-42-64_2332cb9b27b851b548ba47a91682926c.jpg
- 毕业设计参考 - 基于树莓派、OpenCV及Python的人脸识别
- node-v18.20.2-linux-arm64
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功