吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 30635|回复: 261
收起左侧

[原创工具] 煎鱼OCR v1.13 补档

    [复制链接]
旋律丶小飞 发表于 2020-9-1 14:12
本帖最后由 旋律丶小飞 于 2021-7-15 22:09 编辑

软件介绍:纯粹的 文字识别工具,没有多余的功能
主要功能:图片文件识别(浏览/拖拽)、截图识别、多语种识别
其他功能:自定义接口参数、热键、文本累加、自动复制、托盘显示、跳转翻译

蓝奏云的地址变了,补个档(2021年7月15日)
逛论坛看到消息说百度OCR开源了,等有空了搞个离线版出来,想要的朋友可以期待一下,只是最近都比较忙
下载地址:https://wwx.lanzoui.com/b01bp5n3e

软件界面

软件界面

设置界面

设置界面



版本更新:
v1.13
1. 优化:当免费次数达到上线时输出接口返回的提示


以下是原帖,开发过程,感兴趣的朋友不妨看看

前言

我们不生产代码,我们只是代码的搬运工。

开发这个工具是因为工作中遇到需要用到OCR的场景。

那么问题来了:

  • Q:网上有 天若OCR、PandaOCR 等很多优秀的工具,为什么还要自己开发一个呢?

  • A:个人认为功能太杂了,有很多功能是不需要用到的,而且工具太大还影响了运行效率。

  • Q:为什么是搬运呢?

  • A:刚毕业的时候就做过两年的搬运工,深知改别人的代码是多么的痛苦,既然自己要的功能比较简单,而且自己也跃跃欲试想开发一个,就开始了搬运之旅。另外 天若 OCR V5.0.0开源版 在我的电脑上打开报出了几十个错误,对于几年没碰代码的我来说根本解决不了。QAQ

1 成品展示

先上对比图

左边是刚开始做时的界面,成品界面搬运的是 天若,毕竟是经过很多人验证的界面。

界面展示

界面展示

然后是功能展示

拖放/浏览文件识别:

拖放识别

拖放识别

截图识别:

截图识别

截图识别

2 搬运过程

开发一个软件的过程大概分几步:问题出现 -> 方案制定 -> 功能实现 -> 功能完善 -> 优化代码、界面 -> 问题解决。

完成后要增加功能的步骤同上。

2.1 怎么实现文字识别

方案:使用OCR接口,这里我采用了 百度的通用文字识别接口

查看百度的技术文档,其中有一条

access_token

access_token

文字识别接口需要参数access_token,而这个token需要访问百度的 鉴权认证机制接口 才能获取,这都还没开始就遇到问题了,接口什么的都不会,怎么获取啊?!

还好我还在软件行业里面工作,有几个备选方案:

1) 先是用一位同事给我的 HTML+JS 测试访问一下接口,结果出现了跨域的问题,GG。

2) 然后用到了 Postman 工具来访问,成功。

3) 后来才发现,直接把 接口+参数 组成的链接,放到浏览器里面访问(GET),就直接出来了,被其他文档的要求混淆了,吐血。

get access token

get access token

2.2 准备好了就开始开发了

想法:先做图片文件识别,截图识别是下一步功能

方案:浏览文件 -> 按钮识别 -> 中间的文本框显示识别结果

于是得到了下图的界面

初始界面

初始界面

识别接口对接不会写怎么办?

搬!!!  在百度的结束文档里面就有很多语言的demo,直接搬过来改一下token,加上引用就行。

浏览文件功能不会做怎么办?

搬!!!  通过搜索我们知道,C#浏览文件需要用到 OpenFileDialog 控件

知道了什么控件能实现功能但不知道怎么用(写代码)怎么办?

搬!!!  继续搜索 OpenFileDialog 的用法。

于是第一个版本就出来了:

image-20200816215349263.png

2.3 结果出来了,但是格式不对

方案:接口返回的,一般都是 json,那么就需要解析一下了

搬!!!

通过搜索,知道了用C#解析json,需要类库Newtonsoft.Json(下载地址 http://json.codeplex.com/

然后继续搜索能用的demo,发现了这个博客: c#解析json字符串处理(最清晰易懂的方法)

因为返回的接口格式是这样的

{
    "log_id": ,
    "words_result_num": ,
    "words_result": [
    {
        "words": ""
    },
    {
        "words": ""
    }]
}

于是百度给的demo 变成了这样:

image-20200816220524433.png

返回的结果变成了这样:

json解析

json解析

2.4 截图功能

截图功能不会做怎么办?

搬!!!

这个功能花的时间是最长的,对于搬运工来说,重要的是搬运,搜索结果很多都在讲思路;

有些源码又太复杂,太复杂的代码就很难下手,最后找到了一个最合适的博客:截图小工具开发笔记,还包含源码。

这个源码主要有两个步骤,热键 + 截图,热键功能先不要。

面朝黄土背朝天地搬运完成后,截图功能get

截图功能

截图功能

2.5 截图识别

有了截图功能后,就开始提炼了,把需要的代码留下,没有的删掉。

截图识别功能:截图完毕自动识别,那么调整选区大小、移动选区、保存为文件这些功能就不需要了。

通过搜索结果,得知截图功能的原理:

  1. 截取整个屏幕
  2. 把屏幕图像放到窗体Image中
  3. 绘制选区
  4. 把选区中的图片截取出来

那么需要把第4步去掉,修改第3步的代码,变成下面的步骤:

  1. 截取整个屏幕
  2. 把屏幕图像放到窗体Image中
  3. 绘制选区
  4. 绘制完成后直接把图片放到剪切板中
  5. 通过接口识别剪切板中图片的文字

截图完毕代码变成这样:

private void CutPic_MouseUp(object sender, MouseEventArgs e) // 鼠标松开
{
    Cursor.Clip = Rectangle.Empty;
    ToolsPanel.Visible = true;
    this.Invalidate();

    //复制图片到剪切板
    Rectangle cropArea = new Rectangle(_SelectedRectangle.X, _SelectedRectangle.Y, _SelectedRectangle.Width, _SelectedRectangle.Height);
    if (cropArea.Height > 0 && cropArea.Width > 0) // 宽度和高度必须大于零
    {
        Bitmap bmpImage = new Bitmap(this._Image);
        Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
        Clipboard.SetImage(bmpCrop);
    }
    this.DialogResult = DialogResult.OK;
    this.Close();
}

截图按钮代码则变成这样:

private void button3_Click(object sender, EventArgs e)
{
        this.Visible = false;  // 截图时自动隐藏本窗体
        System.Threading.Thread.Sleep(200);  // 延时,避免把本窗体也截下来
        ShowCutPic();  // 截图功能

    if (Clipboard.ContainsImage())  // 判断剪切板是否存在图片
        {
                Image img = Clipboard.GetImage();
                textBox1.Text = generalBasic("", img);  // 识别剪切版中图片的文字
                this.Visible = true;
        }
        else
        {
        this.Visible = true;
        }
}

其中还搬运了 天若开源的代码,图片转 byte:ImgToBytes();以及对 getFileBase64() 函数做了修改。

截图识别功能完成:

截图识别功能

截图识别功能

2.6 优化

功能已经实现了,下一步就是优化,优化过程没什么好说的。

砖已经在这里了,怎么盖房子、怎么盖得好看、怎么盖得稳固,就是考验搬运工的自我修养了。

下图是优化后 github 的提交历史:

github历史

github历史

搬运了天若的智能段落合并、界面,以及复制粘贴等小功能

优化界面花了不少时间,大部分都是在找图标(这里提一下阿里巴巴矢量图标库),踩了不少坑,期间各种搜索效果如何实现,控件的每个属性都看了好多遍。

2.7 设置界面

问题:现在的软件还是写死了 token 的,token 到期之后就用不了,不能去改代码这么麻烦吧

方案:把 token 写成 ini 配置,读取配置

不会写 ini 配置怎么办?

搬!!!  通过搜索得知,C#中要写 ini 配置需要用到"kernel32.dll"中的Win32API函数 WritePrivateProfileString()GetPrivateProfileString()

在天若的源码中也有这部分代码,但我搬运的是网上的一篇博客:C#读写INI文件

设置界面只有两个设置,百度的 token、工具的截图热键,于是就有了下图

设置界面

设置界面

热键功能是下一步要做的

之所以把 Access Token 也保存下来,是因为接口需要图片 base64 和 Access Token 两个参数就足够了

天若的识别代码似乎是识别之前就获取一遍 token,个人认为步骤越少越好

2.8 热键功能

其实热键这个功能可有可无,如果是频繁使用的,那热键是不二之选

热键不会写怎么办?

搬!!!  这个功能直接搬运了天若的代码,因为天若的代码已经是加工过成熟的代码。

其实是一步到位,因为这个功能有三步要搬运的,一是实现热键功能,二是输入框识别键盘功能,三是读取 ini 配置并注册热键功能

一名合格的搬运工,要识别出哪些砖是能用的、哪些砖是好的、哪些砖是自己能搬得动的

热键做好了之后,热键直接触发截图识别按钮对应的代码就行了

3 后记

工具做出来之后就想发出来的,无奈刚好要出差,就晚了半个月

做这个工具更多是因为自己想写写代码,可能是享受开发的过程,可能是享受解决问题的成就感,也可能是着以后继续走开发的道路

最后是成品和源码

版本已更新,请查看贴子顶部的下载连接

成品:https://wws.lanzouj.com/i5G9kg94ozi

源码:https://github.com/YongJunPan/jyocr

github 项目有更新表格识别,因为次数太少就没把成品放出来,感兴趣的朋友可以上去下载

如果喜欢这个贴子,顺手点一下免费评分吧

百度控制台

百度控制台

免费评分

参与人数 140吾爱币 +134 热心值 +126 收起 理由
lxl217114 + 1 很棒的工具,必须得给个热心了。
zlloovvees + 1 + 1 我很赞同!太方便了。
杨biubiu + 1 + 1 谢谢@Thanks!灰常好用
晚秋是一只兔子 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
长久如云漂泊 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
板砖拍不倒 + 1 + 1 谢谢@Thanks!
看看天空 + 1 + 1 谢谢@Thanks!
李珦 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cp328 + 1 + 1 谢谢@Thanks!
娟然俊逸 + 1 + 1 热心回复!
chinch521 + 1 + 1 谢谢@Thanks!
luoxueningchen + 1 + 1 过程和结果一样重要,学习了
huangxin86 + 1 谢谢@Thanks!
yifang3 + 1 我很赞同!
ASP0000 + 1 + 1 谢谢@Thanks!
5016977 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tailor001 + 1 + 1 谢谢@Thanks!
刻周求剑 + 1 + 1 我很赞同!
xiaossi + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
translate + 1 + 1 我很赞同!
猪呵呵HH + 1 + 1 谢谢@Thanks!
毓梓 + 1 谢谢@Thanks!
leonid729 + 1 谢谢@Thanks!
41p4c4 + 1 + 1 热心回复!
zjwzlb + 1 + 1 我很赞同!
czqdavid + 1 + 1 谢谢@Thanks!
fengzdchen + 1 谢谢@Thanks!
ai3366 + 1 + 1 我很赞同!
lyxooo1 + 1 谢谢@Thanks!
红色文字 + 1 + 1 我很赞同!
飞一般的尖尖 + 1 + 1 谢谢@Thanks!
3141592654 + 1 + 1 谢谢@Thanks!
小绵羊 + 1 + 1 很好用 感谢
ARondMan + 1 + 1 我很赞同!
chaozi5756 + 1 + 1 热心回复!
不解释er + 1 + 1 谢谢@Thanks!
qdszzj + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
温良aurora + 1 + 1 鼓励转贴优秀软件安全工具和文档!
anym0us + 1 鼓励转贴优秀软件安全工具和文档!
wws + 1 + 1 能否加上识别后的文本自行修改?
zxc001 + 1 谢谢@Thanks!
hssyz + 1 + 1 谢谢@Thanks!
snai9 + 1 这砖搬得好
一個人的dream + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mantianfeiwu + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
love3510189 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dtchiwei + 1 + 1 谢谢@Thanks!
SUNYULONG + 1 + 1 谢谢@Thanks!
烟雨逸江南 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hye + 1 + 1 热心回复!
duobiwei + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
tobydu + 1 + 1 谢谢@Thanks!
计科小菜花 + 1 + 1 谢谢@Thanks!
EasyDonkey + 1 谢谢@Thanks!
biseshadow + 1 + 1 我很赞同!
1909896341 + 1 用心讨论,共获提升!
ciey + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
T_T二傻子 + 1 + 1 谢谢@Thanks!
wlqc + 1 + 1 我很赞同!
renhwfd + 1 + 1 热心回复!
lsx3794 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
无数的木头 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
屁嗝球 + 1 谢谢@Thanks!
helo茄 + 1 + 1 谢谢@Thanks!
zhushenggao + 1 + 1 谢谢@Thanks!
好先生坏印象 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
幽悠的叶子 + 1 + 1 谢谢@Thanks!
f1367242857 + 1 + 1 热心回复!
hisense + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hxdfree + 1 + 1 谢谢@Thanks!
momololo + 1 + 1 我很赞同!
gg7758mm + 1 我很赞同!
allex02 + 1 + 1 谢谢@Thanks!
ulysses + 1 + 1 我很赞同!
czyceo + 1 谢谢@Thanks!
caesarsa + 1 + 1 谢谢@Thanks!
cjsh66661 + 1 我很赞同!
何处看风 + 1 + 1 用心讨论,共获提升!
unice + 1 + 1 谢谢@Thanks!
baoshan + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
savor + 1 + 1 我很赞同!
l7518597 + 1 + 1 怎么识别俄语并翻译
6322 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
取名真男 + 1 + 1 我很赞同!
zch1504139 + 1 谢谢@Thanks!
lj800827 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yan_97 + 1 + 1 我很赞同!
xh1020 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
alderaan + 1 + 1 谢谢@Thanks!
轻轻的风 + 1 + 1 谢谢@Thanks!
qingcao213 + 1 + 1 谢谢@Thanks!
jw8013 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yanghuiqq168 + 1 + 1 意见已回帖,希望楼主持续开发
我不懂巍巍 + 1 + 1 用心讨论,共获提升!
164738777 + 1 + 1 我很赞同!
日出游荡 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
163qq + 1 + 1 用心讨论,共获提升!
prc3 + 1 + 1 我很赞同!
东写西读 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
轻轻闪过 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

evaxrt 发表于 2020-9-1 17:02
支持楼主持续更新优化,只要最基本的功能即可,不要搞什么大而全。
 楼主| 旋律丶小飞 发表于 2020-9-5 12:43
smallchen 发表于 2020-9-5 01:51
楼主看看我发的帖子里,也有个百度的OCR软件,我还没公布源码,不知道前辈有什么建议可以告知我一下。

前辈不敢当,关于OCR
接口返回的结果都是一行一行的,智能段落可以参考一下 天若OCR开源的代码
既然是桌宠+工具,那常用的工具越多越好,翻译、多语种识别都可以做上去
做这么多工具,运行效率、垃圾回收要好好优化了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
yanghuiqq168 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

ddshttgb 发表于 2020-9-1 15:23
Ai_Power 发表于 2020-9-1 15:30
其实我觉得大家最缺的应该是表格ocr,毕竟优秀普通ocr实在是太多了
eWVhaA 发表于 2020-9-1 15:33
access token可以保存在本地,有效期是30天,直接检查是不是过期就好了。每次请求前和当前时间比对,过期就拿api key和secret去申请,没过期就直接调用,可以减少一次请求。
您这样如果用户api key,secret key和access token都填了,那每次请求到底用哪个呢,如果token到期了,难道再拿key去请求一次嘛
good6878 发表于 2020-9-1 15:36
从来看到尾,每个步骤都是用心在做,发现细节....
yjczawyl 发表于 2020-9-1 15:43
留名!!!
sanmu82 发表于 2020-9-1 15:45
感谢分享
yhzlz 发表于 2020-9-1 15:47
实测可用,感谢分享
jiachenhui 发表于 2020-9-1 15:48
你为啥不打卡签到
左岸麦田 发表于 2020-9-1 15:52
不错,期待百家争鸣。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 12:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表