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

【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程

在车辆管理、物流运输、保险理赔等领域,经常需要处理大量的行驶证信息。传统的人工录入方式效率低、易出错,而使用 OCR 技术可以自动识别行驶证图片中的文字信息,极大提高数据处理效率。该系统可以应用于以下场景: 

保险公司快速录入客户车辆信息,物流公司管理车队行驶证信息,车管所批量处理车辆注册信息,企业车队管理系统数据录入

界面设计

基于 QT 的界面设计应该直观易用,包含以下主要区域:

  1. 菜单栏:包含文件操作、设置和帮助菜单
  2. 工具栏:快速访问常用功能
  3. 图片选择区域:支持拖放和文件选择
  4. OCR 识别按钮:触发识别功能
  5. 预览区域:显示识别结果
  6. Excel 导出按钮:将识别结果导出为 Excel
  7. 状态栏:显示当前操作状态和进度

下面是一个基于 PyQt5 和华为 OCR 的实现方案:

import sys
import os
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QVBoxLayout, QHBoxLayout, QFileDialog, QLabel, QWidget, QProgressBar,QTextEdit, QListWidget, QMessageBox, QSplitter, QAction)
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QPixmap, QIcon
import pandas as pd
import requests
import json
import base64class OCRThread(QThread):"""OCR识别线程,处理图片识别任务"""progress_updated = pyqtSignal(int)ocr_result = pyqtSignal(dict)finished = pyqtSignal()error = pyqtSignal(str)def __init__(self, image_paths, app_key, app_secret):super().__init__()self.image_paths = image_pathsself.app_key = app_keyself.app_secret = app_secretself.access_token = ""self.stop_flag = Falsedef run(self):try:# 获取访问令牌self.access_token = self.get_access_token()if not self.access_token:self.error.emit("获取访问令牌失败")returntotal = len(self.image_paths)results = []for i, image_path in enumerate(self.image_paths):if self.stop_flag:breakresult = self.process_image(image_path)if result:results.append(result)# 更新进度progress = int((i + 1) / total * 100)self.progress_updated.emit(progress)self.ocr_result.emit({"results": results, "total": total})self.finished.emit()except Exception as e:self.error.emit(str(e))self.finished.emit()def stop(self):self.stop_flag = Truedef get_access_token(self):"""获取华为云OCR服务的访问令牌"""token_url = "https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens"headers = {"Content-Type": "application/json"}payload = {"auth": {"identity": {"methods": ["password"],"password": {"user": {"name": "your_username","password": "your_password","domain": {"name": "your_domain"}}}},"scope": {"project": {"name": "cn-north-4"}}}}try:response = requests.post(token_url, headers=headers, json=payload)if response.status_code == 201:return response.headers.get("X-Subject-Token", "")else:print(f"获取令牌失败: {response.text}")return ""except Exception as e:print(f"请求异常: {str(e)}")return ""def process_image(self, image_path):"""处理单张图片,调用华为云OCR服务"""ocr_url = "https://ocr.cn-north-4.myhuaweicloud.com/v2/infers/vehicle-license-plate"headers = {"Content-Type": "application/json","X-Auth-Token": self.access_token}try:with open(image_path, "rb") as f:image_data = f.read()# 对图片进行Base64编码image_base64 = base64.b64encode(image_data).decode("utf-8")payload = {"image": image_base64,"url": "","return_text_location": True,"detect_direction": True}response = requests.post(ocr_url, headers=headers, json=payload)if response.status_code == 200:result = response.json()# 提取关键信息plate_number = self.extract_plate_number(result)vehicle_type = self.extract_vehicle_type(result)owner = self.extract_owner(result)address = self.extract_address(result)use_character = self.extract_use_character(result)model = self.extract_model(result)vin = self.extract_vin(result)engine_number = self.extract_engine_number(result)register_date = self.extract_register_date(result)issue_date = self.extract_issue_date(result)return {"image_path": image_path,"plate_number": plate_number,"vehicle_type": vehicle_type,"owner": owner,"address": address,"use_character": use_character,"model": model,"vin": vin,"engine_number": engine_number,"register_date": register_date,"issue_date": issue_date}else:print(f"OCR识别失败: {response.text}")return Noneexcept Exception as e:print(f"处理图片异常: {str(e)}")return Nonedef extract_plate_number(self, result):"""从OCR结果中提取车牌号"""# 这里需要根据华为云OCR返回的实际格式进行提取# 示例代码,需要根据实际情况调整for item in result.get("result", {}).get("items", []):if "车牌号码" in item.get("text", ""):return item.get("text", "").replace("车牌号码", "").strip()return ""def extract_vehicle_type(self, result):"""从OCR结果中提取车辆类型"""# 实现类似extract_plate_numberreturn ""def extract_owner(self, result):"""从OCR结果中提取车主"""# 实现类似extract_plate_numberreturn ""def extract_address(self, result):"""从OCR结果中提取住址"""# 实现类似extract_plate_numberreturn ""def extract_use_character(self, result):"""从OCR结果中提取使用性质"""# 实现类似extract_plate_numberreturn ""def extract_model(self, result):"""从OCR结果中提取品牌型号"""# 实现类似extract_plate_numberreturn ""def extract_vin(self, result):"""从OCR结果中提取车辆识别代号"""# 实现类似extract_plate_numberreturn ""def extract_engine_number(self, result):"""从OCR结果中提取发动机号码"""# 实现类似extract_plate_numberreturn ""def extract_register_date(self, result):"""从OCR结果中提取注册日期"""# 实现类似extract_plate_numberreturn ""def extract_issue_date(self, result):"""从OCR结果中提取发证日期"""# 实现类似extract_plate_numberreturn ""class MainWindow(QMainWindow):"""主窗口类"""def __init__(self):super().__init__()self.image_paths = []self.ocr_results = []self.ocr_thread = Noneself.init_ui()self.init_menu()def init_ui(self):"""初始化用户界面"""self.setWindowTitle("行驶证OCR识别与Excel处理系统")self.setGeometry(100, 100, 1200, 800)# 创建中央部件central_widget = QWidget()self.setCentralWidget(central_widget)# 创建主布局main_layout = QVBoxLayout(central_widget)# 创建顶部布局 - 文件选择区域top_layout = QHBoxLayout()self.select_files_btn = QPushButton("选择图片")self.select_files_btn.clicked.connect(self.select_files)self.clear_files_btn = QPushButton("清除图片")self.clear_files_btn.clicked.connect(self.clear_files)self.clear_files_btn.setEnabled(False)self.ocr_btn = QPushButton("开始OCR识别")self.ocr_btn.clicked.connect(self.start_ocr)self.ocr_btn.setEnabled(False)self.export_excel_btn = QPushButton("导出Excel")self.export_excel_btn.clicked.connect(self.export_to_excel)self.export_excel_btn.setEnabled(False)top_layout.addWidget(self.select_files_btn)top_layout.addWidget(self.clear_files_btn)top_layout.addWidget(self.ocr_btn)top_layout.addWidget(self.export_excel_btn)# 创建中部布局 - 图片列表和预览区域middle_layout = QHBoxLayout()# 左侧 - 图片列表left_widget = QWidget()left_layout = QVBoxLayout(left_widget)self.image_list = QListWidget()self.image_list.itemClicked.connect(self.on_image_selected)left_layout.addWidget(QLabel("图片列表:"))left_layout.addWidget(self.image_list)# 右侧 - 预览和结果区域right_widget = QWidget()right_layout = QVBoxLayout(right_widget)# 预览区域preview_widget = QWidget()preview_layout = QVBoxLayout(preview_widget)self.image_preview = QLabel("图片预览")self.image_preview.setAlignment(Qt.AlignCenter)self.image_preview.setMinimumSize(400, 300)self.image_preview.setStyleSheet("border: 1px solid #cccccc;")preview_layout.addWidget(QLabel("图片预览:"))preview_layout.addWidget(self.image_preview)# 结果区域result_widget = QWidget()result_layout = QVBoxLayout(result_widget)self.result_text = QTextEdit()self.result_text.setReadOnly(True)result_layout.addWidget(QLabel("识别结果:"))result_layout.addWidget(self.result_text)right_layout.addWidget(preview_widget)right_layout.addWidget(result_widget)# 使用分割器允许用户调整左右区域大小splitter = QSplitter(Qt.Horizontal)splitter.addWidget(left_widget)splitter.addWidget(right_widget)splitter.setSizes([300, 900])  # 初始大小middle_layout.addWidget(splitter)# 创建底部布局 - 进度条bottom_layout = QHBoxLayout()self.progress_bar = QProgressBar()self.progress_bar.setValue(0)self.status_label = QLabel("就绪")bottom_layout.addWidget(self.progress_bar)bottom_layout.addWidget(self.status_label)# 添加所有布局到主布局main_layout.addLayout(top_layout)main_layout.addLayout(middle_layout)main_layout.addLayout(bottom_layout)def init_menu(self):"""初始化菜单栏"""menubar = self.menuBar()# 文件菜单file_menu = menubar.addMenu("文件")open_action = QAction("打开图片", self)open_action.triggered.connect(self.select_files)export_action = QAction("导出Excel", self)export_action.triggered.connect(self.export_to_excel)export_action.setEnabled(False)exit_action = QAction("退出", self)exit_action.triggered.connect(self.close)file_menu.addAction(open_action)file_menu.addAction(export_action)file_menu.addSeparator()file_menu.addAction(exit_action)# 设置菜单settings_menu = menubar.addMenu("设置")ocr_settings_action = QAction("OCR设置", self)ocr_settings_action.triggered.connect(self.show_ocr_settings)settings_menu.addAction(ocr_settings_action)# 帮助菜单help_menu = menubar.addMenu("帮助")about_action = QAction("关于", self)about_action.triggered.connect(self.show_about)help_menu.addAction(about_action)def select_files(self):"""选择图片文件"""file_paths, _ = QFileDialog.getOpenFileNames(self, "选择行驶证图片", "", "图片文件 (*.png *.jpg *.jpeg *.bmp)")if file_paths:self.image_paths.extend(file_paths)self.update_image_list()self.clear_files_btn.setEnabled(True)self.ocr_btn.setEnabled(True)def clear_files(self):"""清除已选择的图片"""self.image_paths = []self.image_list.clear()self.image_preview.setText("图片预览")self.result_text.clear()self.ocr_results = []self.clear_files_btn.setEnabled(False)self.ocr_btn.setEnabled(False)self.export_excel_btn.setEnabled(False)self.status_label.setText("就绪")self.progress_bar.setValue(0)def update_image_list(self):"""更新图片列表"""self.image_list.clear()for path in self.image_paths:file_name = os.path.basename(path)self.image_list.addItem(file_name)def on_image_selected(self, item):"""图片被选中时的处理"""index = self.image_list.row(item)if 0 <= index < len(self.image_paths):image_path = self.image_paths[index]self.display_image(image_path)# 如果已经识别,显示识别结果if index < len(self.ocr_results):self.display_result(self.ocr_results[index])else:self.result_text.clear()def display_image(self, image_path):"""显示图片预览"""pixmap = QPixmap(image_path)if not pixmap.isNull():scaled_pixmap = pixmap.scaled(self.image_preview.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)self.image_preview.setPixmap(scaled_pixmap)else:self.image_preview.setText("无法加载图片")def display_result(self, result):"""显示识别结果"""text = f"车牌号: {result.get('plate_number', '')}\n"text += f"车辆类型: {result.get('vehicle_type', '')}\n"text += f"车主: {result.get('owner', '')}\n"text += f"住址: {result.get('address', '')}\n"text += f"使用性质: {result.get('use_character', '')}\n"text += f"品牌型号: {result.get('model', '')}\n"text += f"车辆识别代号: {result.get('vin', '')}\n"text += f"发动机号码: {result.get('engine_number', '')}\n"text += f"注册日期: {result.get('register_date', '')}\n"text += f"发证日期: {result.get('issue_date', '')}\n"self.result_text.setText(text)def show_ocr_settings(self):"""显示OCR设置对话框"""# 这里可以实现一个设置对话框,让用户输入华为云OCR的API密钥等信息# 简化实现,直接使用消息框QMessageBox.information(self, "OCR设置", "请在代码中修改OCRThread类的get_access_token方法,设置您的华为云账号信息。")def show_about(self):"""显示关于对话框"""QMessageBox.about(self, "关于", "行驶证OCR识别与Excel处理系统\n\n""版本: 1.0.0\n""功能: 批量识别行驶证图片并导出Excel表格\n""技术: 基于PyQt5和华为云OCR服务")def start_ocr(self):"""开始OCR识别"""if not self.image_paths:QMessageBox.warning(self, "警告", "请先选择图片")return# 获取API密钥(实际应用中应该从配置文件或设置对话框获取)app_key = "your_app_key"app_secret = "your_app_secret"# 禁用按钮防止重复点击self.select_files_btn.setEnabled(False)self.clear_files_btn.setEnabled(False)self.ocr_btn.setEnabled(False)self.export_excel_btn.setEnabled(False)# 创建并启动OCR线程self.ocr_thread = OCRThread(self.image_paths, app_key, app_secret)self.ocr_thread.progress_updated.connect(self.update_progress)self.ocr_thread.ocr_result.connect(self.on_ocr_result)self.ocr_thread.finished.connect(self.on_ocr_finished)self.ocr_thread.error.connect(self.on_ocr_error)self.ocr_thread.start()self.status_label.setText("正在识别...")def update_progress(self, value):"""更新进度条"""self.progress_bar.setValue(value)def on_ocr_result(self, result):"""处理OCR识别结果"""self.ocr_results = result.get("results", [])total = result.get("total", 0)success_count = len(self.ocr_results)self.status_label.setText(f"识别完成: {success_count}/{total}")# 如果有识别结果,启用导出按钮if self.ocr_results:self.export_excel_btn.setEnabled(True)# 如果当前选中了图片,显示第一个结果if self.image_list.currentRow() >= 0:self.on_image_selected(self.image_list.currentItem())def on_ocr_finished(self):"""OCR识别完成后的处理"""# 重新启用按钮self.select_files_btn.setEnabled(True)self.clear_files_btn.setEnabled(True)self.ocr_btn.setEnabled(True)self.ocr_thread = Nonedef on_ocr_error(self, error_msg):"""处理OCR识别错误"""QMessageBox.critical(self, "错误", f"OCR识别过程中发生错误: {error_msg}")self.status_label.setText("识别失败")# 重新启用按钮self.select_files_btn.setEnabled(True)self.clear_files_btn.setEnabled(True)self.ocr_btn.setEnabled(True)self.ocr_thread = Nonedef export_to_excel(self):"""导出识别结果到Excel"""if not self.ocr_results:QMessageBox.warning(self, "警告", "没有识别结果可导出")returnfile_path, _ = QFileDialog.getSaveFileName(self, "导出Excel", "", "Excel文件 (*.xlsx)")if file_path:try:# 准备数据data = []for result in self.ocr_results:data.append({"图片路径": result.get("image_path", ""),"车牌号": result.get("plate_number", ""),"车辆类型": result.get("vehicle_type", ""),"车主": result.get("owner", ""),"住址": result.get("address", ""),"使用性质": result.get("use_character", ""),"品牌型号": result.get("model", ""),"车辆识别代号": result.get("vin", ""),"发动机号码": result.get("engine_number", ""),"注册日期": result.get("register_date", ""),"发证日期": result.get("issue_date", "")})# 创建DataFrame并保存到Exceldf = pd.DataFrame(data)df.to_excel(file_path, index=False)QMessageBox.information(self, "成功", f"已成功导出到 {file_path}")self.status_label.setText(f"已导出到 {file_path}")except Exception as e:QMessageBox.critical(self, "错误", f"导出Excel失败: {str(e)}")if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())    

详细代码步骤说明

  1. 环境准备

首先需要安装必要的库:

pip install PyQt5 pandas requests openpyxl
  1. 项目结构

项目主要包含一个 Python 文件,结构如下:

  • OCRThread 类:处理 OCR 识别的后台线程
  • MainWindow 类:主窗口 UI 和交互逻辑
  • 主程序入口
  1. OCR 识别实现

OCRThread 类负责与华为云 OCR 服务通信,主要功能包括:

  • 获取访问令牌(get_access_token 方法)
  • 处理单张图片(process_image 方法)
  • 从 OCR 结果中提取关键信息(extract_* 系列方法)
  1. 用户界面实现

MainWindow 类实现了完整的用户界面,包括:

  • 文件选择和管理功能
  • 图片预览功能
  • 识别结果显示
  • 进度条和状态提示
  • 菜单栏和工具栏
  1. Excel 导出功能

使用 pandas 库将识别结果导出为 Excel 文件,支持用户自定义保存路径。

总结与优化

这个系统实现了基本的行驶证 OCR 识别和 Excel 导出功能,但还有很多可以优化的地方:

  1. 准确性优化

    • 针对行驶证图片特点进行预处理(如旋转、裁剪、增强对比度)
    • 优化 OCR 结果提取逻辑,提高关键信息识别准确率
    • 实现手动校正功能,允许用户修改识别错误的内容
  2. 用户体验优化

    • 添加配置界面,方便用户设置 API 密钥等参数
    • 实现多线程并行处理,提高批量识别速度
    • 添加图片管理功能,如排序、分组、删除等
    • 增加识别结果的可视化展示,如表格形式
  3. 系统稳定性

    • 实现断点续传功能,避免长时间处理中断
    • 添加更完善的错误处理和日志记录
    • 支持更多图片格式和分辨率
  4. 性能优化

    • 对大量图片进行分批处理,减少内存占用
    • 实现识别结果缓存,避免重复识别相同图片

通过以上优化,可以使系统更加实用和高效,满足不同场景下的行驶证信息处理需求。

相关文章:

【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程

在车辆管理、物流运输、保险理赔等领域&#xff0c;经常需要处理大量的行驶证信息。传统的人工录入方式效率低、易出错&#xff0c;而使用 OCR 技术可以自动识别行驶证图片中的文字信息&#xff0c;极大提高数据处理效率。该系统可以应用于以下场景&#xff1a; 保险公司快速…...

Linux--进程的状态

1.进程状态在所有系统中宏观的大致模型 1.1、进程状态与变迁 基础状态&#xff1a;涵盖创建、就绪、运行、阻塞、结束等核心状态&#xff0c;描述进程从诞生到消亡的生命周期流转&#xff0c;如创建后进入就绪&#xff0c;争抢 CPU 进入运行&#xff0c;遇 I/O 或资源等待则转…...

(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)

题目&#xff1a;2434. 使用机器人打印字典序最小的字符串 思路&#xff1a;贪心栈&#xff0c;时间复杂度0(n)。 字符串t其实就是栈&#xff0c;后进先出。要让p的字典序最小&#xff0c;那当然是t每次弹出的字符&#xff0c;都小于或等于“剩下未入t里的字符串的字符”&#…...

008-libb64 你有多理解base64?-C++开源库108杰

正确认识二进制数据和文本数据的关系;深刻理解 base64 编码核心等式&#xff1a;256256256 64646464 经常听到——以至 AI 也会这么回答的&#xff1a;base64 编码用于将二进制数据&#xff0c;转换为文本数据。但是&#xff0c;众所周知&#xff0c;在数字电子计算机中&#…...

电子电路基础2(杂乱)

电容器 容抗 滤波电路&#xff08;半波&#xff09; 全波整流 因为A点的电压比D点的电压高&#xff0c;所以D点会走向C点 电感基础 什么是电感器&#xff1f; 一种把电能转换成磁能&#xff0c;并可以将磁能存储起来的元器件。 在嵌入式开发中&#xff0c;电感主要用于动态能量…...

LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架

一、软件介绍 文末提供程序和源码下载 LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架&#xff0c;具有隐藏活动的 rootkit、与 Windows/Linux/Mac OSX 兼容的不可检测的可塑植入物&#xff0c;以及自配置后门。凭借其 Web 界面和强大的…...

电脑的ip地址会自动变怎么办?原因解析和解决方法

在当今互联网时代&#xff0c;IP地址是每台联网设备的"身份证"&#xff0c;但很多用户都遇到过IP地址自动变化的情况。这种现象既可能发生在内网&#xff08;局域网&#xff09;环境中&#xff0c;也可能出现在外网&#xff08;公网&#xff09;连接中。要理解IP地址…...

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)

在填充 PDF 中的图形时&#xff08;以及许多其他技术中&#xff09;&#xff0c;你可以选择使用 Even-Odd&#xff08;奇偶&#xff09; 或 Non-Zero&#xff08;非零&#xff09; 填充规则。 对于那些已经在想“你在说啥&#xff1f;”的朋友&#xff0c;别担心&#xff0c;我…...

C++.OpenGL (5/64)变换(Transformation)

变换(Transformation) 变换矩阵核心概念 #mermaid-svg-OvPP9vqkY9MRAHyd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-icon{fill:#552222;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-tex…...

优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?

磁盘优化 磁盘清理&#xff1a; 使用系统自带的磁盘清理工具&#xff08;如Windows的“磁盘清理”&#xff09;删除不必要的文件。清空回收站。删除临时文件和缓存。 磁盘碎片整理&#xff08;针对机械硬盘&#xff09;&#xff1a; 定期进行磁盘碎片整理&#xff0c;以提高文…...

【八股消消乐】MySQL参数优化大汇总

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…...

JavaSec-SPEL - 表达式注入

简介 SPEL(Spring Expression Language)&#xff1a;SPEL是Spring表达式语言&#xff0c;允许在运行时动态查询和操作对象属性、调用方法等&#xff0c;类似于Struts2中的OGNL表达式。当参数未经过滤时&#xff0c;攻击者可以注入恶意的SPEL表达式&#xff0c;从而执行任意代码…...

在 Caliper 中执行不同合约的方法

在 Caliper 中执行不同的智能合约需要通过正确配置工作负载(workload)和测试轮次(rounds),下面我将详细介绍如何执行不同的合约。 1. 通过 config.yaml 配置不同测试轮次 你可以在 config.yaml 中为不同的合约定义不同的测试轮次: rounds:- label: test-helloworlddescript…...

CSS 平铺+自动换行效果

先上效果图 样式 <template><div class"activity-questions"><h1>活动题库</h1><div v-if"loading" class"loading">加载中...</div><div v-else><div v-if"questions.length 0" clas…...

微服务网关SpringCloudGateway+SaToken鉴权

目录 概念 前置知识回顾 拿到UserInfo 用于自定义权限和角色的获取逻辑 最后进行要进行 satoken 过滤器全局配置 概念 做权限认证的时候 我们首先要明确两点 我们需要的角色有几种 我们需要的权限有几种 角色 分两种 ADMIN 管理员 &#xff1a;可管理商品 CUSTIOMER 普通…...

永磁同步电机控制算法--模糊PI转速控制器

一、原理介绍 在常规的PID控制系统的基础上提出了一种模糊PID以及矢量变换方法相结合的控制系统&#xff0c;经过仿真分析对比证明&#xff1a; 模糊PID控制系统能够有效的提高永磁同步电机的转速响应速度&#xff0c;降低转矩脉动&#xff0c;增强了整体控制系统的抗干扰能力…...

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景&#xff1a;重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少&#xff1f; 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…...

计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结

基于MATLAB的图像特征提取与匹配算法全面指南 图像特征提取与匹配 基于MATLAB的图像特征提取与匹配算法全面指南一、图像特征提取基础特征类型分类二、点特征提取算法1. Harris角点检测2. SIFT (尺度不变特征变换)3. SURF (加速鲁棒特征)4. FAST角点检测5. ORB (Oriented FAST …...

DVWA全靶场

目录 暴破 Low - 万能密码 Medium - 转义 High - Token Impossible 命令注入 CSRF跨站请求伪造 - 抓包 Low Medium - 域名限制 High - 域名限制xss 文件包含 - 页面点点点 Low Medium - 过滤http:// High - file Impossible - 写死 文件上传 Low Medium - 文件…...

【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测

C2FDrone&#xff1a;基于视觉Transformer网络的无人机间由粗到细检测 C2FDrone: Coarse-to-Fine Drone-to-Drone Detection using Vision Transformer Networks 论文链接 摘要 摘要——基于视觉的无人机间检测系统在碰撞规避、反制敌对无人机和搜救行动等应用中至关重要。然…...

Android 本地存储路径说明

一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时&#xff0c;SD卡根目录会…...

Git 推送失败解决教程——error: failed to push some refs to

&#x1f6a7; Git 推送失败解决教程&#xff1a; 错误信息&#xff1a; error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.&#x1f9e0; 问题原因简述&#xff1a; 你的本地分支试图将…...

spark 执行 hive sql数据丢失

spark-sql 丢失数据 1.通过spark执行hive sql 的时候&#xff0c;发现 hive 四条数据&#xff0c;spark 执行结果只有两条数据 目标对应的两条数据丢失 select date&#xff0c; user_id&#xff0c; pay from dim.isr_pay_failed where user_id ‘*******’ hive-sql 结果…...

国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计

方案概述 本设计以国微PCIe Switch 8748为核心交换芯片&#xff0c;通过多端口PCIe 4.0/5.0通道连接飞腾ARM架构处理器、龙芯LoongArch处理器及昇腾AI加速卡&#xff0c;构建支持NVMe协议的高速存储集群&#xff0c;目标实现6.5GB/s以上的可持续带宽。 硬件架构 处理器选型 飞…...

【Qt】:设置新建类模板

完整的头文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷贝构造和赋值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…...

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)

您是否曾经想更改网站外观的某些方面&#xff0c;但不知道怎么做&#xff1f;有一个解决方案——您可以将自定义 CSS&#xff08;层叠样式表&#xff09;添加到您的WordPress网站&#xff01; 在本文中&#xff0c;我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…...

开始在本地部署自己的 Gitea 服务器

0.简介 在软件开发和团队协作中&#xff0c;代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅&#xff0c;这个软件已经很久没有更新了。经过多方考察&#xff0c;发现Gitea 是一款轻量级的开源代码托管平台&#xff0c;具有易于部署、资源占用少、功能丰富…...

7.2.1_顺序查找

知识总览&#xff1a; 顺序查找&#xff1a; 算法思想&#xff1a; 从头到脚挨个找或者从脚到头挨个找适用于线性表(顺序存储和链式存储都适用)&#xff0c;又叫线性查找 实现&#xff1a; 1个数组elem指向数组的起始位置&#xff0c;索引从0开始遍历数组直到找到目标值返回…...

spring重试机制

数据库死锁处理与重试机制实现指南 1. 业务场景 1.1 问题现象 高并发批量数据处理时频繁出现数据库死锁主要发生在"先删除历史数据&#xff0c;再重新计算"的业务流程中原有逐条处理方式&#xff1a;list.forEach(item -> { delete(); calculate(); }) 1.2 死…...

C语言的全称:(25/6/6)

C语言&#xff0c;全称为"C Programming Language"&#xff08;C程序设计语言&#xff09;&#xff0c;是一种广泛使用的计算机编程语言。它是由Dennis Ritchie于1972年在贝尔实验室设计的&#xff0c;继承了B语言的许多思想&#xff0c;并加入了数据类型的概念及其他…...