当前位置: 首页 > news >正文

外贸网站电子建设网站建设预算表制作

外贸网站电子建设,网站建设预算表制作,中国建筑网校,竞价网站策划文章目录 前言1.代码2.代码改进说明2.1OCR识别线程2.2权限整合 3.摄像头集成4.自动去重添加5.界面功能扩展5.1手动添加快递表单5.2数据表格更新5.3管理员操作菜单 6.运行准备6.1安装依赖6.2摄像头权限6.3如果需要,将用户加入video组 7.扩展功能建议7.1识别优化7.2性…

文章目录

  • 前言
  • 1.代码
  • 2.代码改进说明
    • 2.1OCR识别线程
    • 2.2权限整合
  • 3.摄像头集成
  • 4.自动去重添加
  • 5.界面功能扩展
    • 5.1手动添加快递表单
    • 5.2数据表格更新
    • 5.3管理员操作菜单
  • 6.运行准备
    • 6.1安装依赖
    • 6.2摄像头权限
    • 6.3如果需要,将用户加入video组
  • 7.扩展功能建议
    • 7.1识别优化
    • 7.2性能优化
    • 7.3记录查看筛选
    • 7.4数据导出
  • 8.功能
  • 9.运行效果


前言

本文简单介绍了SQLite的使用,存储信息并进行实时更新。


1.代码

import sys
import cv2
import sqlite3
import numpy as np
from datetime import datetime
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton,QVBoxLayout, QHBoxLayout, QMessageBox, QTableWidget,QTableWidgetItem, QHeaderView, QComboBox)from paddleocr import PaddleOCR#初始化PaddleOCR(使用中英文超轻量模型)
ocr = PaddleOCR(use_angle_cls=True, lang='ch', use_gpu=False)#======================
#摄像头OCR识别线程
#======================
class OCRThread(QThread):result_signal = pyqtSignal(str)  # 识别结果信号def __init__(self):super().__init__()self.running = Falseself.cap = cv2.VideoCapture(0)  # 打开默认摄像头def run(self):self.running = Truewhile self.running:ret, frame = self.cap.read()if ret:# OCR识别results = ocr.ocr(frame, cls=True)for line in results:if line and len(line) >= 1:text = line[0][1][0]  # 提取识别文本if len(text) >= 10:  # 假设快递单号长度至少10位self.result_signal.emit(text)breakdef stop(self):self.running = Falseself.cap.release()#======================
#数据库管理类(带权限控制)
#======================
class ExpressManager:def __init__(self, current_user):self.conn = sqlite3.connect('express_delivery.db')self.current_user = current_userself.is_admin = self._check_admin()def _check_admin(self):cursor = self.conn.execute("SELECT role FROM users WHERE username=?", (self.current_user,))return cursor.fetchone()[0] == 'admin'# 其他数据库方法保持之前实现,添加权限检查def delete_express(self, tracking_num):if not self.is_admin:raise PermissionError("需要管理员权限")# 删除逻辑...#======================
#主界面
#======================
class MainWindow(QWidget):def __init__(self, username):super().__init__()self.username = usernameself.manager = ExpressManager(username)self.init_ui()self.init_camera()def init_ui(self):self.setWindowTitle(f"快递管理系统 - {self.username}")self.setGeometry(100, 100, 800, 600)# 创建控件self.table = QTableWidget()self.table.setColumnCount(4)self.table.setHorizontalHeaderLabels(["快递单号", "用户名", "加急状态", "创建时间"])self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 摄像头显示区域self.cam_label = QLabel()self.cam_label.setFixedSize(640, 480)# 控制按钮self.btn_start = QPushButton("开始扫描")self.btn_stop = QPushButton("停止扫描")self.btn_add = QPushButton("手动添加")# 管理员功能if self.manager.is_admin:self.btn_delete = QPushButton("删除记录")self.btn_update = QPushButton("修改状态")# 布局control_layout = QHBoxLayout()control_layout.addWidget(self.btn_start)control_layout.addWidget(self.btn_stop)control_layout.addWidget(self.btn_add)main_layout = QVBoxLayout()main_layout.addLayout(control_layout)main_layout.addWidget(self.cam_label)main_layout.addWidget(self.table)self.setLayout(main_layout)self.load_data()def init_camera(self):self.timer = QTimer()self.timer.timeout.connect(self.update_frame)self.ocr_thread = OCRThread()self.ocr_thread.result_signal.connect(self.handle_ocr_result)def handle_ocr_result(self, text):"""处理OCR识别结果"""# 去重检查existing = self.manager.search_express(tracking_num=text)if not existing:self.manager.add_express(text, self.username)self.load_data()def update_frame(self):"""更新摄像头画面"""ret, frame = self.ocr_thread.cap.read()if ret:img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)h, w, ch = img.shapeq_img = QImage(img.data, w, h, QImage.Format_RGB888)self.cam_label.setPixmap(QPixmap.fromImage(q_img))# 其他方法:load_data, 按钮事件处理等...#======================
#登录窗口
#======================
class LoginWindow(QWidget):def __init__(self):super().__init__()# 保持之前的登录逻辑...def handle_login_success(self, username, role):self.main_window = MainWindow(username)self.main_window.show()self.close()#======================
#运行程序
#======================
if __name__ == "__main__":app = QApplication(sys.argv)# 初始化数据库init_database()window = LoginWindow()window.show()sys.exit(app.exec_())

2.代码改进说明

2.1OCR识别线程

class OCRThread(QThread):result_signal = pyqtSignal(str)
  1. 使用独立线程处理摄像头和OCR识别
  2. 通过信号传递识别结果,避免阻塞GUI主线程

2.2权限整合

class ExpressManager:def __init__(self, current_user):self.is_admin = self._check_admin()
  1. 在数据库操作类中增加权限检查
  2. 管理员才能执行删除/修改操作

3.摄像头集成

def init_camera(self):self.timer = QTimer()self.timer.timeout.connect(self.update_frame)
  1. 使用QTimer定时更新摄像头画面
  2. OpenCV捕获视频流,转换为Qt图像格式显示

4.自动去重添加

def handle_ocr_result(self, text):existing = self.manager.search_express(tracking_num=text)if not existing:self.manager.add_express(text, self.username)
  1. 自动检查快递单号是否已存在
  2. 只添加新快递单号到数据库

5.界面功能扩展

5.1手动添加快递表单

class AddExpressDialog(QDialog):def __init__(self, parent=None):super().__init__(parent)self.setWindowTitle("手动添加")layout = QFormLayout()self.tracking_input = QLineEdit()self.urgent_combo = QComboBox()self.urgent_combo.addItems(["普通", "加急"])layout.addRow("快递单号:", self.tracking_input)layout.addRow("加急状态:", self.urgent_combo)# 添加确认按钮...

5.2数据表格更新

def load_data(self):self.table.setRowCount(0)data = self.manager.search_express()for row, record in enumerate(data):self.table.insertRow(row)self.table.setItem(row, 0, QTableWidgetItem(record[0]))# 填充其他列...

5.3管理员操作菜单

if self.manager.is_admin:menu = self.table.createContextMenuPolicy()menu.addAction("修改状态").triggered.connect(self.edit_record)menu.addAction("删除记录").triggered.connect(self.delete_record)

6.运行准备

6.1安装依赖

sudo apt install python3-opencv
pip install paddleocr paddlepaddle pyqt5

6.2摄像头权限

#检查视频设备权限
ls -l /dev/video*

6.3如果需要,将用户加入video组

sudo usermod -aG video $USER

7.扩展功能建议

7.1识别优化

  1. 添加图像预处理(灰度化、二值化)
  2. 使用ROI区域限定识别范围
  3. 添加后处理验证快递单号格式

7.2性能优化

#在OCRThread中设置识别间隔
def run(self):while self.running:# 每0.5秒识别一次time.sleep(0.5)# 识别逻辑...

7.3记录查看筛选

self.filter_combo = QComboBox()
self.filter_combo.addItems(["全部", "加急件", "今日新增"])
self.filter_combo.currentIndexChanged.connect(self.apply_filter)

7.4数据导出

def export_to_csv(self):with open('export.csv', 'w') as f:writer = csv.writer(f)writer.writerow(["单号", "用户", "加急", "时间"])for row in self.manager.search_express():writer.writerow(row)

8.功能

  1. 多用户权限管理系统
  2. 摄像头实时OCR识别
  3. 数据库存储管理
  4. Qt图形界面操作
  5. 管理员特权功能

9.运行效果

  1. 普通用户:只能查看快递信息和启动摄像头扫描
  2. 管理员:额外具有删除记录和修改状态权限
  3. 摄像头画面实时显示并后台识别
  4. 自动过滤重复快递单号
  5. 表格实时更新数据库内容

http://www.dtcms.com/a/578378.html

相关文章:

  • 10大免费软件下载网站响应式网站的优势有那些的呢
  • Redis_6_String
  • 在orangepi 5plus 使用移远usb 4g sim rndis
  • 网站集约化建设调研报告梁山有没有做企业网站的
  • Git常用命令大全及提交推送详解
  • Rust 练习册 14:RefCell 实际使用场景
  • 新手做网站优化怎么做宾馆网站模板
  • app软件网站开发门户网站建设思维导图
  • java学习--重载
  • 懒人手机网站模板个人网页制作成品图
  • OpenAI 生产环境终极指南:从原型到规模化
  • YL4056H单节锂电池线性充电芯片
  • 静态IP与动态IP的定义
  • RAID技术全面解析:从基础原理到组合算法
  • 2.3.5 浮点数的表示与运算【2017统考真题】
  • 购物网站建设渠道字体在线生成器
  • 阿里云官方网站 icp代备案管理系统重庆网站推广什么
  • 《十五五规划》下的AI边缘计算机遇:算力下沉与工业智能化
  • 签订网站建设合同商城类网站价格
  • 《链改2.0:从数字资产到RWA》新书宁波重磅发布
  • 基于Springboot的智慧管网灌溉系统i1agupa7(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
  • 正则表达式可视化 - 正则表达式可视化与文本匹配工具
  • JavaScript 正则表达式:选择、分组与引用深度解析
  • 20251106给荣品RD-RK3588-MID开发板跑Rockchip的原厂Android14系统时更换wallpaper墙纸
  • 桂林做网站多少钱做网站给不给源代码
  • 如何使用 Nodemon 自动重启 Node.js 应用
  • Tongweb8安装部署
  • 汽车网站设计模板网页图片批量下载
  • Playwright高级用法全解析:从自动化到工程化的进阶指南
  • 【开源】FBro 浏览器工作流自动化系统