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

前几天帮同专业的哥们扒他专业课课件里的截图文字,几百张图一张一张敲简直要疯,后来翻出吃灰半年的MATLAB,花了俩小时搭了个小工具,终于不用当人肉打字机了

MATLAB软件,图片文字识别,GUI界面,汉字和英文识别提取,匹配,写入txt中 中英文都可以,图片文字识别也可以

最开始我以为要自己写OCR模型调参数,结果翻了下MATLAB官方文档,发现R2019b之后直接内置了ocr函数,专门处理印刷体文字识别,完全不用自己造轮子。先试了单张图片的基础用法,代码超精简:

% 读取目标图片 img = imread("课件截图1.png"); % 调用内置OCR识别 ocrResults = ocr(img); % 直接输出识别结果 disp(ocrResults.Text); % 一键写入txt文件 writelines(ocrResults.Text, "单张识别结果.txt");

这段代码跑起来几乎没门槛,就是读个图、扔给OCR函数、存结果。不过第一次踩坑了:拿手机拍的手写笔记试了下,识别率惨不忍睹,后来才反应过来自带的OCR对印刷体友好,手写的还是得换深度学习模型,不过咱们平时扒课件截图、扫描版论文,全是印刷体,完全够用。

后来觉得每次跑命令行太麻烦,就用MATLAB的App Designer搭了个可视化界面,拖拖拽拽就弄好了所有元素:放了个坐标轴显示图片预览,三个按钮分别是「选择单张图片」「批量选择图片」「开始识别」,一个下拉框选筛选类型(就是咱们要的匹配功能),一个大文本框显示识别结果,还加了个手动保存的按钮。

先给大家看选单张图片的回调代码,逻辑超简单:

function SelectImagePushed(app, event) % 弹出文件选择框,支持png/jpg/jpeg格式 [filename, pathname] = uigetfile({'*.png;*.jpg;*.jpeg', '图片文件 (*.png, *.jpg, *.jpeg)'}, '选择待识别图片'); if isequal(filename,0) return; % 用户点了取消就直接退出 end % 存下图片路径,后面识别要用 app.imgPath = fullfile(pathname, filename); % 在坐标轴里显示图片预览 img = imread(app.imgPath); imshow(img, app.UIAxes); end

点了识别按钮之后,就会调用OCR函数,然后根据下拉框选的匹配类型筛选文字——这也是我做这个工具最实用的点:比如要只提取汉字,就用正则表达式匹配中文字符和中文标点;要只提取英文,就匹配英文字母、数字和常用英文标点,不用手动删来删去。核心代码如下:

function RecognizePushed(app, event) % 先判断有没有选图片 if ~isfield(app, 'imgPath') uialert(app.UIFigure, '请先选择图片!', '提示'); return; end img = imread(app.imgPath); % 加个预处理,提高暗图的识别率 img_gray = rgb2gray(img); img_bin = imbinarize(img_gray, 'adaptive'); ocrResults = ocr(img_bin); rawText = ocrResults.Text; % 核心匹配筛选逻辑 switch app.MatchTypeDropDown.Value case '仅汉字' % 匹配所有中文字符+中文标点 chineseText = regexp(rawText, '[\u4e00-\u9fa5,。、;:“”‘’()!?]+', 'match'); app.ResultTextArea.Value = strjoin(chineseText, ''); case '仅英文' % 匹配英文字母、数字、常用英文标点和空格 englishText = regexp(rawText, '[a-zA-Z0-9\s.,!?;:()\''"]+', 'match'); app.ResultTextArea.Value = strjoin(englishText, ''); otherwise % 直接输出全部识别结果 app.ResultTextArea.Value = rawText; end end

这里的[\u4e00-\u9fa5]是Unicode里汉字的编码范围,加上常用中文标点的规则,就能精准把汉字和中文标点捞出来;英文那边的正则也覆盖了大部分日常用到的字符,完全够用。

MATLAB软件,图片文字识别,GUI界面,汉字和英文识别提取,匹配,写入txt中 中英文都可以,图片文字识别也可以

批量处理的逻辑也差不多,就是把单张处理改成循环,给每个图片生成单独的结果文件,还自动建了个OCR_Results文件夹存所有结果,不用手动整理:

function BatchRecognizePushed(app, event) [filenames, pathname] = uigetfile({'*.png;*.jpg;*.jpeg', '图片文件 (*.png, *.jpg, *.jpeg)'}, '批量选择待识别图片', 'MultiSelect', 'on'); if isequal(filenames,0) return; end % 自动创建保存文件夹 saveDir = fullfile(pathname, 'OCR_Results'); if ~exist(saveDir, 'dir') mkdir(saveDir); end for i = 1:length(filenames) imgPath = fullfile(pathname, filenames{i}); img = imread(imgPath); img_gray = rgb2gray(img); img_bin = imbinarize(img_gray, 'adaptive'); ocrResults = ocr(img_bin); rawText = ocrResults.Text; % 同样用匹配筛选逻辑 switch app.MatchTypeDropDown.Value case '仅汉字' chineseText = regexp(rawText, '[\u4e00-\u9fa5,。、;:“”‘’()!?]+', 'match'); textOut = strjoin(chineseText, ''); case '仅英文' englishText = regexp(rawText, '[a-zA-Z0-9\s.,!?;:()\''"]+', 'match'); textOut = strjoin(englishText, ''); otherwise textOut = rawText; end % 用原图片名生成对应的结果文件 [~, name, ~] = fileparts(filenames{i}); writelines(textOut, fullfile(saveDir, [name '_OCR结果.txt'])); end uialert(app.UIFigure, ['批量识别完成!结果已保存到:' saveDir], '完成'); end

上次帮哥们处理300多张课件截图,跑批量的时候我就去摸鱼了,回来直接去文件夹里拿结果,连整理都省了,他还给我带了杯奶茶,血赚(不是)。

最后提一嘴,要是不想每次都开MATLAB跑代码,还能用MATLAB自带的deploytool把这个APP打包成独立的exe文件,发给不用装MATLAB的朋友也能直接用,就是打包的时候会有点慢,不过胜在方便。

其实这个小工具还能加不少功能,比如识别表格里的文字、支持手写体识别、加个关键词搜索之类的,不过目前用来扒课件截图已经完全够用了。反正现在我是再也不想当人肉打字机了。

http://www.cnnetsun.cn/news/1456404.html

相关文章:

  • 基于STM32的嵌入式设备集成影墨·今颜AI能力边缘计算方案
  • 保姆级教程:用DosBox Daum给Win95装上3dfx Voodoo显卡驱动,告别虚拟机卡顿
  • Youtu-VL-4B-Instruct-GGUF模型社区贡献指南:从CSDN分享到开源协作
  • 实时AI信号引擎NexusPulse™驱动肿瘤学决策
  • 开源工具RyzenAdj:AMD锐龙处理器性能调校与功耗平衡指南
  • Bidili Generator实操手册:如何编写高效Prompt触发Bidili LoRA专属风格
  • 如何快速实现批量下载:CyberdropBunkrDownloader开源工具的终极使用指南
  • 图像加密避坑指南:Arnold变换的周期性陷阱与MATLAB优化方案
  • 无缝集成小米智能家居:HomeAssistant的MIoT协议解决方案
  • Qwen2.5-0.5B Instruct实现Token经济系统设计
  • 技术揭秘:Camera Shakify如何用数学模拟电影级相机抖动效果
  • 前端接入 LLM 必学:彻底搞懂 Token 是什么
  • 咱们今天聊点硬核的——如何从流体仿真一路杀到声场计算。射流噪声这玩意儿在航空发动机和工业排气里都是个磨人的小妖精,直接上操作流程
  • 3步解锁B站缓存视频:m4s-converter让你永久珍藏心爱内容
  • AI图像放大3倍还清晰?Super Resolution细节重建技术揭秘
  • 开源模型社区实践:借鉴GitHub协作模式参与Qwen模型生态建设
  • 无需专业设备!Fish-Speech 1.5声音克隆技巧:手机录音就能用
  • 如何在极暗环境下训练AI视觉系统?ExDark数据集实战指南
  • 智能体元年2026:从“对话”到“行动”的范式跃迁
  • 西门子S7 - 200 PLC与组态王构建旋转式滤水器控制系统
  • 毫安必争:百万级智能锁 MQTT Keep-Alive 功耗调优全指南
  • 告别枯燥图表!用时空波动仪FlowState Lab打造80年代科幻风数据监控台
  • MedGemma 1.5应用指南:就医前如何用AI整理症状和问题
  • 降AIGC到底是什么?别再把降重和降AI混为一谈,一篇讲透核心逻辑
  • 云手机 无限挂机避坑指南
  • HTML转Word终极指南:浏览器端文档转换的实战手册
  • 卡梅德生物技术快报|单 B 细胞抗体技术:从细胞分选到抗体鉴定的全流程技术实操
  • 第八篇:《东坡八首·其八》|低谷圆满收官,平凡烟火里藏着职场最高级的活法
  • OpenClaw+GLM-4.7-Flash快捷指令:5个提升效率的预设命令
  • Zotero Duplicates Merger终极指南:如何快速清理文献库中的重复条目