jn10010537
2024年,C#/C++
展开
-
【专栏介绍 C/C++/Python应用开发】
【专栏提纲 ID_01】C/C++/Python混合编程背景Table of Contents背景更新时间:2020.12.05;更新版本:第一版;写作时间:准备抽周末以及平时下班的业余时间上,将这个专栏写的质量尽可能的高一些。写作方式:先拟好提纲,然后逐步的完善。保持一周至少一篇的进度。写作范围:前期涉及的是开发相关的(python全栈开发以及图像应用算法落地),后期会逐渐添加算法相关的内容;面向人群:学生,以及方案解决的同仁等。备注:并不能做到尽善尽美,但是追求完美,愿与志同道合的诸君,原创 2020-12-05 11:32:59 · 1299 阅读 · 1 评论 -
【python中级】解压whl文件内容
在 旧版 setuptools 中(< v58),如果想生成 .whl,必须先pip install 安装 wheel 三方包!即setuptools 版本75.8.0 ,直接调用 bdist_wheel 生成 .whl,无需 wheel 额外支持。.whl(Wheel 文件)是 Python 打包与分发 的一种格式,类似于 .zip 文件。在windows10上可以简单粗暴的将whl后缀改为.zip , 然后执行解压即可!.whl 文件本质上是一个 .zip 压缩包,你可以使用 zipfile 解压。原创 2025-04-04 20:12:44 · 203 阅读 · 0 评论 -
【python中级】关于Cython 的源代码pyx的说明
Cython 是 Python 的超集,支持 Python 语法,同时允许直接使用 C 语言的类型和函数,从而大幅提升性能。即.pyx 文件是 Cython 的源代码文件,必须通过msvc/g++编译器,首先先编译成 Python 扩展模块(.so、.pyd 文件),才能在 Python 中导入和使用,它能显著提升性能。Cython 是一个编程语言和工具链,用于将 Python 代码(或类 Python 的代码)编译成 C 语言,再进一步生成高性能的 Python 扩展模块(.so 或 .pyd 文件)。原创 2025-04-04 19:22:06 · 149 阅读 · 0 评论 -
【python中级】关于whl文件的说明
在 pip 出现之前,Python 主要使用 setup.py install 方式安装软件包,但这种方法需要 每次都编译源码,导致安装速度慢,尤其是包含 C 扩展的库(如 三方包numpy、pandas)。如果不存在,说明它可能是某个包的 依赖项(比如 pip install numpy 时自动安装的 setuptools)。记录该包的顶级 Python 模块(不含 .),用于 pip uninstall 识别模块。存储该包的核心元数据(名称、版本、作者、依赖等),符合 PEP 566 规范。原创 2025-04-03 16:13:19 · 155 阅读 · 0 评论 -
【python中级】使用 setuptools生成 whl 轮子文件
如果确实需要 cp313-cp313-win_amd64.whl,使用 方法 1(命令行参数python setup.py bdist_wheel --python-tag cp313 --plat-name win_amd64)或者 方法 2(虚拟 C 扩展)会更可靠。通过 添加 C 扩展,setuptools 认为这个 .whl 需要和特定的 Python 版本、ABI 以及平台匹配,因此不会生成 py3-none-any.whl,而是 cp313-cp313-win_amd64.whl。原创 2025-04-03 12:15:08 · 50 阅读 · 0 评论 -
【python中级】使用 distutils 和wheel生成whl 轮子文件
特别注意:与 setuptools 不同,distutils 无法使用 find_packages() 自动发现包,必须显式列出 packages 参数。注意:distutils是Python的标准库,而setuptools是其增强版,提供了更多功能,但需要额外pip install setuptools。生成的 .whl 文件位于 dist/ 目录中,命名格式如 my_package-0.1.0-py3-none-any.whl。在python的whl轮子是python三方包非常流行的分发文件!原创 2025-04-01 22:53:33 · 134 阅读 · 0 评论 -
【python中级】使用distutils构建和分发模块的setup函数参数说明
虽然现在推荐使用更现代的 setuptools(兼容并扩展了 distutils),但仍可以使用 distutils来构建和分发模块!推荐参数:install_requires, description, license, python_requires。条件参数:ext_modules(需要 C 扩展时必填)、include_dirs(依赖外部头文件时必填)。必须参数:name, version, packages(或 py_modules)。可选参数:其余参数根据项目需求选择添加。原创 2025-04-01 12:46:15 · 65 阅读 · 0 评论 -
【python3】 sqlite格式的db文件获得所有表和数据
SQLite 格式的 .db 文件通常存储的是一个关系型数据库。你可以使用图形化工具(如 DB Browser for SQLite)或命令行工具(如 sqlite3)来查看数据库的结构和内容。此外,使用 Python 的 sqlite3 库也是一个很方便的方式来访问和操作 SQLite 数据库。原创 2025-01-10 09:21:34 · 734 阅读 · 0 评论 -
【python中级】 控制文件大小的简易日志
日志(Log)在软件开发和运行中扮演了重要的角色,主要用于记录系统运行过程中的事件和状态信息。日志的核心作用是记录、分析和追踪,不仅对开发者和运维人员有用,还能为用户体验、安全性和业务决策提供支持。在 Python 中使用 open() 写入日志文件,要让日志文件的大小受控,可以使用文件大小检查,当日志文件超过设定大小时,重命名旧日志文件并创建新的日志文件。1.设置合适的日志级别(如 DEBUG、INFO、WARNING、ERROR、CRITICAL)。2.设计合理的日志格式,确保信息可读且易于分析。原创 2024-12-31 15:46:43 · 131 阅读 · 0 评论 -
【python中级】打包pyd时检查MSVC 编译器
在 Windows 上,Python 的 .pyd 文件与普通 .dll 文件在本质上类似,但它们是专门为 Python 解释器加载的模块,格式上有特定的要求。将 .pyd 重命名为 .dll 文件后无法直接调用,这是因为 Python 在加载模块时期待的是 .pyd 文件,而非普通的 .dll 文件。如果你需要用其他语言调用 .pyd 文件,需要通过 Python C API 或其他机制间接调用 .pyd,因为 .pyd 文件本质上是依赖 Python 运行时的模块。原创 2024-12-31 13:08:31 · 88 阅读 · 0 评论 -
【应用开发】关于串口监控的实现原理以及解决方案
实际的应用程序(上位机)与虚拟串口通信,而虚拟串口再将数据转发到实际的串口设备,并同时将数据复制到监控工具中(上图的串口服务)。这种方法的优点是透明地捕获数据,不会干扰实际的通信流程。上面背景里提到,串口工作需要驱动层的工作,如果在操作系统的驱动层拦截串口数据,那么就可以达到不占用串口而监控串口!这些监控软件能够在不占用串口的情况下监控串口通信,主要是通过操作系统的驱动层或底层技术来实现数据的捕获。-2、实时性:硬件监控设备可以捕获实时的串口数据,并通常具有高采样率,确保数据的完整性。原创 2024-08-30 22:59:41 · 681 阅读 · 0 评论 -
【应用开发】关于RS232串口如何进行数据传输
RS-232C 全双工通信利用 TX 和 RX 引脚在独立的线路上同时传输和接收模拟电压信号,从而实现高效的双向数据通信。详细描述:RS-232C通信有 TX、RX、GND 三条线是全双工通信中的关键信号线,每条线在通信过程中都有特定的作用。TX 和 RX 是独立的线路,即TX 和 RX 引脚分别独立工作,允许数据在两个方向上同时传输,不会产生冲突或干扰。RS-232C使用正电压和负电压来表示逻辑0、1信号,通过电压电平的变化进行数据传输。下面是RS-232C如何使用电压表示和传输逻辑信号的详细解释。原创 2024-08-14 12:05:18 · 689 阅读 · 0 评论 -
【应用开发】 RS232C串口通信传输错误指令的问题分析以及解决方案
RS-232C通常用于短距离、低速的数据传输,例如在计算机与调制解调器、打印机、工业设备之间的通信。上位机软件发送串口指令,要求下位机必须在0.5秒内返回正确的指令内容,否则上位机关闭串口连接。在公司测试的时候未出现上位机断连的情况,到客户那里经常出现,设备返回公司进行原因分析。RS-232C是一种常见的串行通信硬件标准,用于在计算机和外围设备之间进行数据传输。上位机通过串口传输的指令错误(比如,上位机发的1010,实际串口输出的是1100)!串口的硬件是支持RS232C,软件协议是自定义的。原创 2024-08-14 10:36:08 · 690 阅读 · 0 评论 -
【python中级】串口发送ASCII字符以及十六进制字符
无论你在代码中使用的是ASCII字符、十六进制表示,还是其他格式,这些都需要最终转换为字节数据才能通过串口发送。从上可以看到ASCII字符串直接编码encode(‘ascii’),速度快一丢丢,实际工作中忽略不计这种优势;串口通信通常发送和接收的是字节数据,也就是二进制数据(0,1 两种状态)。分别发送ASCII字符串和Hex字符串,并比较转化字节码的速度。串口发送ASCII字符或者发送16进制数据对应的字符串。字符串可以通过编码为字节形式后发送。串口监控在工作中会经常需要使用,原创 2024-08-13 12:14:59 · 471 阅读 · 0 评论 -
【python中级】 ascii码转hex进制的字符串
关于hex即十六进制,由数字(0-9)和字符组成(A、B、C、D、E、F),其中字符不区分大小写;关于ASCII即American Standard Code for Information Interchange缩写,美国信息交换标准代码。ASCII一种字符编码标准,用于电子通信中表示文本。它最早于1960年代开发,最初设计用于电传打字机,现在广泛应用于计算机和网络设备中。相关博客:【python3】 python3字符串与(16、2)进制数相互转换在串口通信中,常常需要有ASCII码与hex十原创 2024-07-29 17:43:58 · 319 阅读 · 0 评论 -
【python中级】 pyinstaller打包可执行程序的说明
通常使用pyinstaller打包程序可以简单总结如下,基本够平时应用。backEnd_Main.py为需要打包的脚本。常用的参数用法:-w: 指定生成 GUI 软件,也就是运行时不打开控制台-c: 运行时打开控制台-i : 指定打包后可执行文件的图标–clean: 在构建之前清理PyInstaller缓存并删除临时文件–add-data:如果你的程序依赖于其他文件(如数据文件、配置文件等),该选项将这些文件包含在可执行文件中。原创 2024-07-26 23:55:14 · 156 阅读 · 0 评论 -
【python中级】图像从笛卡尔坐标系转换为极坐标系
在对数极坐标变换中,径向距离 r 是对笛卡尔坐标系中的距离取对数的结果:(这里log即 lg:10为底的对数,叫作常用对数。对数极坐标变换,则更适用于需要处理大尺度变化的图像,例如在某些图像稳定、旋转不变性特征提取和目标跟踪等高级应用中。线性极坐标变换,适用于需要保持图像原始比例和距离关系的情况,例如在图像处理和计算机视觉中的一些基本应用。这种变换保持了距离的线性关系,也就是说,离原点越远的点在极坐标系中的径向距离越大。这种变换压缩了较远距离的点,使得远离原点的点在极坐标系中的径向距离变小。原创 2024-07-07 14:49:07 · 732 阅读 · 0 评论 -
【C语言】使用C语言编写并使用gcc编译动态链接库
具体来说,在 Windows 上它会扩展为 __declspec(dllexport),使得该函数可以从 DLL 中导出。这段代码与前面的 extern “C” 对应,即C++ 兼容性(结束),标志着 extern “C” 块的结束。这行代码与文件开头的 #ifndef FPDSYS_H 对应,即头文件防护(结束),标志着头文件防护的结束。编写 C 代码,创建一个头文件 fpdsys.h 和一个源文件 fpdsys.c。这段代码用于定义 FPDSYS_API 宏,以便在编译 DLL 时导出函数。原创 2024-07-02 21:11:44 · 525 阅读 · 1 评论 -
【python中级】确保同一台计算机上只运行一个程序实例
其实在现实项目中,我们大多数情况是希望限制程序只能同时运行一个实例,即避免出现重复运行的问题!在linux平台下可以使用fcntl模块,fcntl模块是Python的标准库之一,毕竟我只是用一下,并不像再造轮子,我选择直接安装作者发布的filelock三方包。文件锁是一种基于磁盘文件的互斥锁,用于确保只有一个进程可以访问某个文件。可以下载他的python源码查看,您也可以源码实现自己的文件锁工具。最近发现自己的客户在以超出我预想的方式使用我的软件。我很震惊,但是我觉得需要改变的是我,而不是他!原创 2024-05-17 23:16:18 · 399 阅读 · 0 评论 -
【python中级】 试用nuitka打包PySide6应用程序
Nuitka2.1,Python 3.11.9(安装包:python-3.11.9-amd64.exe)Nuitka这个打包工具,参数实在是太多,后续再慢慢研究。本博客GUI框架采用的是PySide6。安装 PySide6版本:6.7.0。亲测,打包后的可执行程序可以运行。如果觉得毫无必要,请君跳过。原创 2024-04-28 21:15:25 · 529 阅读 · 1 评论 -
【python中级】 导出python项目的三方包及版本
生成的 requirements.txt 文件可以通过 pip install -r requirements.txt 命令快速安装所需的依赖包。基于从您的py脚本中找出需要的三方包,然后去生成的requirements.txt中查对应的版本,最后重新生成一个项目实际依赖的三方包即可。使用命令pip freeze > requirements.txt 会导出大量与该项目无关的依赖,包括很多个包信息。所以项目保存源码的时候,最好能附带记录依赖的三方包以及其版本,那就更完美了。原创 2024-04-28 08:35:38 · 987 阅读 · 0 评论 -
【python中级】安装nuitka依赖的gcc编译器
如果您的计算机无法下载winlibs-x86_64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt-11.0.1-r1.zip;那么这个您可以手动下载本博客资源,然后将其拷贝到提示的目录下即可,再次执行Nuitka --version 即可。请注意,gcc保存在提示的目录下。原创 2024-04-20 16:19:35 · 864 阅读 · 0 评论 -
【python中级】安装nuitka打包工具
Nuitka 是一个用于将 Python 代码编译成 C 或 C++ 代码的工具。可以把nuitka看成它是一个优化的 Python 编译器,Nuitka 的工作原理是将 Python 代码转换成等效的 C 或 C++ 代码,然后使用 C 或 C++ 编译器将其编译成本地可执行文件。编译完的可执行文件,提高了代码的执行速度,避免了 Python 解释器的开销,特别是对于一些性能敏感的应用程序。原创 2024-04-20 15:15:15 · 1246 阅读 · 1 评论 -
【python中级】将字符串按照固定长度分割
创建 ui_indicatePic.py文本,把base64编码图片后的字符串赋值给indicatePic_2_base64_utf8。由于这个图片我经常审美上要进行修改,然后每次base64编码图片后的字符串其实是非常非常长的字符串。使用re模块的findall函数,分割字符串(包含任意字符)。方法是利用re模块的findall函数,分割字符串。为了美观,我需要手动的回车回车来形成上图的效果!原创 2023-07-26 00:43:29 · 1104 阅读 · 0 评论 -
【python中级】 base64编码将图片数据转化为成字符串
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。Base64 常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。图片的 BASE64 编码就是可以将一幅图片数据编码成一串字符串,使用该字符串代替图片地址,从而不需要使用图片的 URL 地址。原创 2023-07-24 19:55:28 · 2306 阅读 · 0 评论 -
【CPP应用】测试CPU架构是大端还是小端模式
union是一个联合体,所有变量共享一块内存,内存是按变量最大所需要的字节数来开辟存储地址空间。本博客利用CPP的union的特性,来判断CPU架构是大端字节序还是小端字节序。在接收主机再将网络字节序的数据转换成本主机的字节序,这样就可以正确的解析数据。理由2,然后是高地址按习惯存高字节,低位值在内存中放地址低位,这很合理!大端模式、小端模式是字节序里面的概念,即大端字节序,小端字节序。这样就发现似乎大端字节序才是习惯中的王者风范,您的最爱。理由1,首先你把地址从左至右,按照高地址到低地址排列。原创 2023-07-24 00:39:43 · 302 阅读 · 0 评论 -
【C应用】测试CPU架构是大端还是小端模式
对应的地址是0x100-0x103,在大端字节序的PC上的内存存储顺序是0x12345678,在小端PC上是0x78564312。大端模式、小端模式是字节序里面的概念,即大端字节序,小端字节序。所谓大端(大端字节序)就是指高位值在内存中放低位地址,所谓小端(小端字节序)是指低位值在内存中放低位地址。使用C语言代码检测x86架构CPU的字节序模式。程序运行检测出是小端字节序模式。比如0x12 34 56 78。原创 2023-07-23 22:31:48 · 555 阅读 · 0 评论 -
【应用开发】关于字节序的理解
低位的值小,高位值大。在计算机系统中,以字节为单位的,每个地址单元都对应着一个字节(8bit),这些字节里存储了数据,而这些字节的排序就有可能不同,比如两个字节的数据,他们会有两种顺序!字节序,即多字节在电脑内存中存放时的序列 与 输入(输出)时的字节序列 是按照字节先到的在前还是后到的在前,如果先到在前则为小端序,否则为大端序。对于小端字节序,地址的增长顺序与值的增长顺序相同,低位字节是0x37、0x23,高位字节0x05,0x20。注意:高位字节是0x20、0x05,低位字节0x23、0x37。原创 2023-07-23 17:30:22 · 336 阅读 · 0 评论 -
【python中级】MODBUS-RTU通信协议的CRC16循环冗余码校验
另外,特别注意:MODBUS通讯中使用的格式为:LSB-MSB格式(低字节在前,高字节在后)。接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。但实际在行业内,规定了各种数据格式生成多项式的国际常用的CRC参数模型。CRC校验,理论上生成多项式G(x)和校验的数据长度n是任意的!),简称CRC16。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,原创 2023-07-14 21:55:04 · 1336 阅读 · 0 评论 -
【python中级】将10进制数转化为指定字节长度的16进制字符串
比如在电压电流的设置的时候,发送的串口指令,就经常需要将10进制的数转化为指定长度的16进制字符串。在上位机开发的过程中,经常需要发送串口指令,其中串口指令经常需要生成。一般的长度是2个字节或者1个字节。原创 2023-07-13 18:34:01 · 691 阅读 · 0 评论 -
【python中级】将串口通信的字节码转换为16进制的字符串
通信协议就有Modbus-RTU、Modbus-ASCII以及从站设备厂自定义的协议。关键是使用python内置方法hex()实现!通过python的pyserial 三方包来进行串口数据通信。注意:您需要有一个从站和串口号(从站和串口号都可以模拟)一般工业里我用的比较多的是RS232-C通信总线,这种的bytes字节码类型的数据,可阅读性比较差,在开发上位机程序的过程中,经常会用到串口通信。通过串口传输的数据,一般都是字节码。将字节码转化为16进制的字符串更方便阅读。原创 2023-07-05 12:04:38 · 961 阅读 · 0 评论 -
PyQt5 menu菜单栏设置
PyQt5 版本:5.11.3PyQt5 menu设置# -*- coding: utf-8 -*-'''@author yys'''import sysfrom PyQt5.QtWidgets import QMainWindow, QApplication,QAction,QMenufrom PyQt5.QtGui import QIcon,QCursorclas...原创 2019-10-12 12:20:32 · 5990 阅读 · 4 评论 -
【PyQt5】指示灯显示
假设label标签的大小为60px*60px,对应的border-radius: 30px。我们本质是用Qt5的label文本标签来实现的,即通过设置标签的样式表来实现的。利用Qt5写工业控制软件交互界面的时候,经常需要在界面上有指示灯功能。step-2、设置Label标签的geometry几何的宽度和高度,step-1、在画布上拉一个TextLabel标签。例如下面的明暗表示串行端口的连接和断开。通过Qt设计师绘制指示灯的大致步骤如下。python3的代码示例如下。step-3、编辑样式表,原创 2023-05-28 22:51:06 · 2322 阅读 · 0 评论 -
【应用开发】关于ASCII码的进制对照表
在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。ASCII(American Standard Code for Information Interchange美国信息交换标准代码),是基于拉丁字母的一套电脑编码,作为国际通用的信息交换标准代码。如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;十进制32~126(共95个)是字符(32是空格),其中十进制48~57为0到9十个阿拉伯数字。如“A”原创 2022-12-11 08:20:42 · 1061 阅读 · 0 评论 -
【应用开发】关于串口和通信协议
他们的区别就是电气标准不一样,即RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及物理形态、电缆或传输的通信协议。串口是一个物理层面的电器电口,他是看得见摸得着的,但并没有固定的样式。还有其他别的串口本文不介绍,其实本文就说,RS232、RS485是工业设备通信常用的电器接口,RS232、RS485是串口中的一种。以下是9 针D 形连接器,通常是RS232、RS485的接口,但RS232、RS485串口的物理形态是不固定的。串口它规定了接口的电气标准,即它只是物理层的一个标准。原创 2022-12-10 18:46:25 · 981 阅读 · 0 评论 -
【python中级】强行kill杀掉进程
如果程序涉及到主进程开子进程,并在一定条件下关闭子进程。可在windows以及linux下杀掉进程。以下示例代码 “kill杀掉进程.py”大概率就是需要kill杀掉进程。原创 2022-11-18 16:28:43 · 3176 阅读 · 0 评论 -
【python中级】裁剪1、2寸电子照片
这个300dpi不是瞎来的,参考了人眼能分辨出的最大分辨率是300dpi,超过这个分辨率,人的眼睛是无法看出差别的,也就是说 300dpi和600dpi在人眼看来是没有差别的,异能人不再抬杠范围。DPI是分辨率的一种,即设备分辨率,也称为输出分辨率,是指各种类型的输出设备可以产生的每英寸点数,例如监视器,喷墨打印机 ,激光打印机,绘图仪的分辨率,此分辨率由DPI测量。现在的冲印设备最大的设计输出分辨率,就是300dpi,对于大尺寸比如6寸,一般来说能达到200dpi,肉眼看到就很清晰了!原创 2022-11-18 00:30:46 · 895 阅读 · 0 评论 -
【python中级】Pillow包在图像中绘制中文
目前使用python语言还不能在图像中高效率的绘制中文,可以对比,使用Pillow包绘制中文可能达到20ms,同等配置下使用opencv绘制英文不到0.1ms,差别还是很大的。目标检测类项目一些场景需要在界面上绘制文字信息,而中文的显示需求很大。所以后面会考虑将c++支持图像绘制中文的源码打包编译并开源贡献出来。opencv-python到目前为止,还不支持在图像中绘制中文。以下脚本使用Pillow三方包实现在图像上绘制中文。在算法绘制的直播推流业务场景。原创 2022-11-12 23:38:19 · 936 阅读 · 0 评论 -
【AI技术】物体识别概述1
物体识别的主要研究内容是对图像进行特征描述,通常采用深度学习技术对整个图像进行特征学习,这些特征作为是否存在某类物体的判断依据。例如,对图像进行简单的正常异常的分类。注意:图像分类适用于实际环境很相对简单的场景,且被分类的主体在图片中占比较大,则最后的模型泛化能力将更强。识别一张图中是否是某类物体/状态/场景,适用于图片内容单一、需要给整张图片分类的场景。物体识别又叫物体分类,通常也称为图像分类,即对整张图片进行分类。物体识别针对的是物体分类任务,要解决是图片中是否包含某类物体。原创 2022-09-12 22:42:13 · 2550 阅读 · 0 评论 -
【python中级】linux系统获得计算机网卡流量
在计算机使用onvif抓图以及rtsp推拉流的时候,我们希望知道当前计算机的网卡流量。因为我们带宽是有限的,当计算机的实时的数据传输量过大,就会导致基于网络处理的不稳定!基于/proc文件系统,具体是基于内核网卡信息文件: /proc/net/dev/proc/net/dev 这个文件存储了主机上的网络数据,提供给用户读取其统计信息的途径。原创 2022-09-03 20:56:17 · 1075 阅读 · 0 评论