-
2022-06-19 16:56:53
背景:
为了提升用户欣赏书法图片的体验,需要从高清TIF图片中把每个字都切割出来,手动切割太麻烦,所以利用opencv自动识别图片中的文字,并将每个文字切割保存。
实现代码:
import cv2 import os import sys import numpy as np #自动切割单字 def split_image_by_auto(filePath, saveTo, threshold, margin): # img = cv2.imread(filePath) filename = filePath.split('\\')[-1].split(".")[0] print(filename) if os.path.exists(saveTo + filename) == False : os.mkdir(saveTo + filename) img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), -1) sp = img.shape print("图像信息:", sp) h = sp[0] w = sp[1] c = sp[2] #save 一份完整的 resize = cv2.resize(img, (int(w * 1000 / h), 1000)) # cv2.imwrite(saveTo + filename+"_0.jpg", resize) cv2.imencode('.jpg', resize)[1].tofile(saveTo + filename+"/0.jpg") #支持中文 gray_img
更多相关内容 -
matlab二代身份证文字数字切割识别
2018-04-16 00:11:48用matlab实现的一个基于连通域方法切割出二代身份证上数字和汉字并且运用模板法进行识别的程序,效果还可以~文档里面包含了课程的实验报告还有关于连通域切割的一篇论文,我就是基于这个论文写的程序! -
python代码使用pyautogui截图并进行通过easyocr文字识别.py
2021-12-07 12:34:47python使用pyautogui截图并进行文字识别.py -
MATLAB复杂背景文字识别[GUI界面,行切割字符切割].zip
2021-04-04 00:10:19MATLAB多行文字识别(GUI),该课题用输入处理的图片,灰度处理,图像增强处理,进行边缘检测,腐蚀,闭运算[先膨胀后腐蚀],去除小面积干扰,得到定位的汉字区域,连通域法分割汉字[同车牌原理],模板匹配识别。... -
Python语音转文字、音频切割、语音识别
2021-10-11 20:54:05不停的熟读稿子,又或者提前花费大量时间把稿子写好,在录屏的时候对着读但是光写稿子也要花费了大量的时间啊所以我想到的方法就是先对着照PPT说一遍并录下来,再将用代码自动将音频自动提取出来转成文字,...大家好,我是一行
不知道你有没有录过自我介绍的视频,尤其是那种加上PPT播放的长时间视频
可能因为说错一句话就得重来,又或者因为思考而暂停时间太久又得重来,以至于弄了两个小时才做好五分钟的视频
所以就像为了答辩一样,为了让演讲流利不卡壳一遍过,不停的熟读稿子,又或者提前花费大量时间把稿子写好,在录屏的时候对着读
但是光写稿子也要花费了大量的时间啊
所以我想到的方法就是先对着照PPT说一遍并录下来,再将用代码自动将音频自动提取出来转成文字,然后第二遍正式录制视频的时候看着生成的讲稿就不用因为不熟练而卡壳,同时也省去了一个个码字的时间消耗
所以为了更好的去录制视频,这里将上述过程全部用代码流程化分享给大家
-
视频提取音频
-
音频频率转化、音频切割
-
音频转成文字
1视频提取音频
如果你练习时是录的视频,那需要将视频里的语音提取出来,方便后期操作
当然这个过程目前在各个视频剪辑软件里都可以一键分割,例如剪映、必剪、Pr等等
但是当任务量增加的时候,操作就显得非常浪费时间,而用Python的话3行代码就可以提取出来,就算任务量增加最多再加个循环即可
代码如下
from moviepy.editor import AudioFileClip # 导入视频 my_audio_clip = AudioFileClip("一行玩Python/1012 视频转文字/11.mp4") # 提取音频并保存 my_audio_clip.write_audiofile("一行玩Python/1012 视频转文字/11.wav")
2音频转文字
提取音频之后就要把音频转成文字了,目前市面上有很多方式都可以快速的将视频里的音频内容转成文字
-
科大讯飞、知意等付费平台
-
剪映、Pr等剪辑如案件生成字幕
-
百度云、腾讯云等国内接口
-
GOogle、IBM、Bing等国外接口
-
自己造轮子,语音识别训练
-
自己一边听一边打字
虽然说有这么多方法可以去实现这个需求,但任务量增长后,想不花钱,又想不花时间造轮子,最好的办法就是用现成的接口
百度接口使用
申请百度接口
如果想用百度接口来批量处理,需要
百度语音API地址:https://cloud.baidu.com/doc/SPEECH/index.html
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = 'xxx' API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx' SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件 def get_file_content(file_path): with open(file_path, 'rb') as fp: return fp.read() # 识别本地文件 result = client.asr(get_file_content('音频.wav' % i), 'wav', 16000, { 'dev_pid': 1537 # 默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格 }) print(result['result'])
如果你恰巧是用mac录的音频,那就得对音频进行降频处理
因为百度接口只能识别16 kHz的音频,而mac录的是48 kHz的音频,当然用ffmpeg重采样一下就可以
import ffmpeg ffmpeg.input('输入音频.wav').output('输出音频.wav', ar=16000).run()
如果的你音频比较长,但是百度短语音识别接口支持1分钟以内的音频,这时候需要对音频进行分割处理
from pydub import AudioSegment from pydub.utils import make_chunks #blues文件30s audio = AudioSegment.from_file("voice.wav", "wav") size = 30000 #切割的毫秒数 chunks = make_chunks(audio, size) ##将文件切割为59s一块 for i, chunk in enumerate(chunks): ##枚举,i是索引,chunk是切割好的文件 chunk_name = "voice{0}.wav".format(i) print(chunk_name) ##保存文件 chunk.export(chunk_name, format="wav")
然后重采样、剪切好的音频循环调用百度API接口就可以完成了~
exe
当然,也有前辈利用百度API直接写成了一个exe来使用
只需要在刚才百度智能云注册申请账号即可使用
3最后
而现在互联网的大趋势是视频内容,了解视频相关的应用对于做内容也非常有帮助
之前有前辈分享过如果做短视频创作秘籍,就是把互联网上最火的内容下载个1、200个,然后拿来翻拍,毕竟火过的内容很大概率还会再火
当然有些人会向我过去一样质疑,这tm不是抄袭嘛,但是很多内容本来就可以同主题多形式的,例如别人拍的炒蛋炒饭,那你同样可以翻拍炒蛋炒饭,这有什么不好的吗
而批量下载抖音之前介绍过,现在又可以把这些的视频内容提取出来,下一步就可以进行批量翻拍,离实现一个小目标岂不是越来越近了
技术永不眠,下期见~
一行把自己的各种Python玩法文章整理成了一本电子书,干货满满!
目录如下,还包括自己各种面试赚钱经验,现在免费送给大家~
链接: https://pan.baidu.com/s/11R1XRdxbDrFeHdosfP3aGA 密码: dl55
-
-
python图片切割以及识别图片中的文字
2022-05-27 17:59:35在爬取网站https://verbalearn.com/game-tri-tue/dap-an-duoi-hinh-bat-chu/时,需要按如下需求爬取图片和答案: 本次爬取数据量不大,爬取内容也都集中在一个页面,网站也没有异步加载或反爬措施,但是遇到了三个...今天记录在爬取图片网站时,需要按如下需求展示图片和答案:
本次爬取数据量不大,爬取内容也都集中在一个页面,网站也没有异步加载或反爬措施,但是遇到了三个难点:
难点一:图片链接是lazyload,且全部151条图片链接,分散在两个模块下,第一个模块’//div[@class=“entry-content”]/figure/img’的43条图片链接数据爬取顺利,第二个模块’//div[@class=“entry-content”]/p/img’下的108条图片链接却总是显示只能爬取到第一条数据:
如上图,xpath定位没有问题,但结果却总是只有一条数据,暂时还没有搞清楚为什么,最后改成’//div[@class=“entry-content”]//img’来定位,可以直接两个模块下的链接一起爬取,反而更方便,只是这样的结果多出一条数据(最后一条数据),由于只多出一条,便未修改代码逻辑,直接手动去掉了,爬取图片到本地的代码如下:
import requests from lxml import etree import time url = 'https://verbalearn.com/game-tri-tue/dap-an-duoi-hinh-bat-chu/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'} img_list = list() req = requests.get(url,headers=headers) print(req.status_code) html = etree.HTML(req.text) path = '//div[@class="entry-content"]//img' results = html.xpath(path) print(len(results)) for result in results: try: img_text = result.xpath('./@data-lazy-src') img_text1 = img_text[0].strip() print(img_text1) img_list.append(img_text1) except IndexError: continue print(img_list) for img_url in img_list: img_resp = requests.get(img_url) img_name = img_url.split("-chu-")[-1] # 如果没有提前剔除掉最后一条不要的数据,这里需要增加try...except来跳过最后一条数据 print(img_name) with open("img1/"+img_name,mode="wb") as f: f.write(img_resp.content) print("over!",img_name) time.sleep(1)
难点二:图片的切割操作。由于几张图片共用一个链接,所以需要对图片切割后才能得到单独的图片,这里有两个地方需要处理:
1,图片既有.jpg 格式,又有.png格式,需要统一,且之前的代码只是用img_name = img_url.split(“-chu-”)[-1] 切片操作来命名,图片的命名比较不美观,这里需要先对所有图片进行批量重命名;
2,共享一个链接的图片数量不一致,有些是6张共享一个链接,有些是9张共享一个链接,这里由于数据量不大,直接手动分类。将其按照数量分成了4个分类放在不同的文件夹下:
处理过程:
1,图片批量重命名:如上图所示,命名极其杂乱。首先将后缀全部统一成.jpg格式:在图片文件夹下创建一个.bat文件,在文件中写入ren *.png *.jpg代码,之后双击.bat,即可将所有图片后缀改成.jpg格式;然后重命名,由于需求没有要求爬取的图片按照网站图片顺序显示,且最后用到的是切割后的小图片,所以可以直接重命名,直接按1,2,3…这样的顺序重命名151个图片文件即可(这里肉眼发现1419-1430的图片和1449-1460的图片重复,唉,牛逼网站这么不规律,直接手动删除了,还剩150条数据)
批量重命名:
- 1,先全选图片,鼠标随便放在一张图片上,右键重命名,命名为new.jpg,安心enter键,之后所有图片变成new(1).jpg,new(2).jpg的命名;
- 2,再全选图片,选中一张照片,先空格,再enter,之后所有图片变成(1).jpg,(2).jpg,的命名;
- 3,去掉括号:在当前文件夹下创建一个.bat文件,里面代码如下:之后双击运行.bat文件,即去掉所有的括号。
@Echo Off&SetLocal ENABLEDELAYEDEXPANSION FOR %%a in (*) do ( echo 正在处理 %%a set "name=%%a" set "name=!name:(=!" set "name=!name:)=!" ren "%%a" "!name!" ) exit
2,切割图片:由于图片有4个分类(暂时还没有识别图片有几张小图片,然后自动切割的方法,后面深入学习后看看能否自动识别),只能分成4个文件夹分别切割,代码如下:
import cv2 import os heightCutNum = 2; # 高度切割,4个分类分别放在2,3,4,5这四个文件夹下,分别有2,3,4,5行,四次分割修改这里的数字即可 widthCutNum = 3; inPath = "D:/python/code/Test/TestScrapy/img/2/" #四次分割修改这里的文件路径 outPath = "D:/python/code/Test/TestScrapy/img/new/" for f in os.listdir(inPath): path = inPath + f.strip() print(path) img = cv2.imread(path) height = img.shape[0] # The size of each input image width = img.shape[1] heightBlock = int(height / heightCutNum) # The size of block that you want to cut widthBlock = int(width / widthCutNum) for i in range(0, heightCutNum): for j in range(0, widthCutNum): cutImage = img[i * heightBlock:(i + 1) * heightBlock, j * widthBlock:(j + 1) * widthBlock] savePath = outPath + f.strip().replace(".jpg","") + "_" + str(i) + str(j) + ".jpg" cv2.imwrite(savePath, cutImage)
最终切割结果如下:
可以看到结果基本满足要求,但是还是有一个问题,对于一个链接里面的图片不是3的倍数的图片,就会有如图7_12.jpg这样的空图片,由于切割后的图片数量达到1425条,还是有一定的量,就不手动剔除了,后面在图片识别的时候做逻辑判断踢掉吧。
难点三:图片识别提取答案文字。根据上文的图片得知,网页源代码里面根本没有答案文字信息,所有答案直接在图片里面,只能通过图片文字识别来获得答案。而且要识别的文字还是越南语(唉,垃圾网站)
安装easyocr库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple easyocr pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torchvision pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torchaudio
通过镜像安装,没有遇到什么阻碍,但是运行越南语示例代码时,下载语言模型时总是出错:
reader = easyocr.Reader(['vi'],gpu=False) result = reader.readtext('1_00.jpg') print(result)
原因是只将解压后的.pth文件放C:\Users\jingjing.EasyOCR\model路径,却没有放.zip包;需要将.zip包和.pth都放该路径下才能正常运行:
图片文字识取完整代码如下:
import os import easyocr dic_set = dict() inPath = "D:/python/code/Test/TestScrapy/img/new/" bg = op.load_workbook(r'write.xlsx') sheet = bg["Sheet1"] i = 1 for f in os.listdir(inPath): path = inPath + f.strip() name = f.strip().replace(".jpg","") reader = easyocr.Reader(['vi'],gpu=False) result = reader.readtext(path) print(name + ":") try: output = result[0][1] except: output = '未识别到图片' print(output) sheet.cell(i,1,name) sheet.cell(i,3,output) i = i + 1 bg.save("write.xlsx") print('over!')
更多关于easyocr图片识别的使用可以看另一篇博客:easyocr快速安装及图片文字提取演示(小语种)
-
C#从图片中识别文字
2017-09-01 16:21:54可以用图片中识别出来文字 写的一个Demo程序,主要是提供参考抛砖迎玉 不喜勿喷,顺便拿点辛苦资源分 源代码需要安装 环境,自己看代码研究,无错误 -
OCR字符识别--文字切割算法之投影切割
2020-08-31 16:21:22文字识别的关键之所在就是单个文字的切割,切割的准确度极大的影响了文字识别的正确率。本文基于传统横纵投影的思想对文字进行切割,使用java与python实现了本算法。 基本思路: 1、横向扫描,切出每一行 2、...前言:
文字识别的关键之所在就是单个文字的切割,切割的准确度极大的影响了文字识别的正确率。本文基于传统横纵投影的思想对文字进行切割,使用java与python实现了本算法。
基本思路:
1、横向扫描,切出每一行
2、对每一行进行纵向扫描,得出每一个字
经过对原始图像的相关处理,得出如下二值图(仅有黑白色)。这里的‘相关处理’是很复杂的,涉及图像学相关知识,我是通过opencv进行处理的。本文主要对切割算法进行讨论,图片处理部分望读者自行了解。
(待切割图)
横向扫描
横向扫描就是依次从左往右统计,得出这一行黑色点的数量。比如上图尺寸为1200*430,经过横向扫描就可以得到430个数值,这个数值表示在1200个点中黑色点的数量。我们把这430个数直观的展示出来,可以得到下图:
(横向切割统计图,x:行数 y:黑色点数)
在上图中,y轴数值不为0的区域就是文字存在的地方,为0的区域就是每行之间相隔的距离。我们通过如下规则就可以找出每一行文字的起始点和终止点,以定位该行文字区域:1、如果前一个数为0,则记录第一个不为0的坐标;2、如果前一个数不为0,则记录第一个为0的坐标。形象的说就是从出现第一个非空白行(开始有字)到出现第一个空白行(没有字)这段区域就是文字存在的区域。
(横向切割说明图)
纵向扫描
纵向扫描与横向扫描同理。针对横向扫描切割出的区域,进行纵向扫描,得出每一个字。
我们对横向扫描得出的第一行进行纵向扫描,可以得到1200个数值,如下图:
(横向切割统计图,x:行数 y:黑色点数 省略了部分区域)
再运用横向扫描的思维,对纵向扫描的数据进行切割,就可以得出单个文字了。
切割结果
(切割结果)
可以看到切割结果有些不理想,会存在很多连在一起的字。
结果分析
算法对于数字切割十分理想,但是对于汉字会存在切割失败的现象。分析发现部分汉字两两之间没有空白区域,是连在一起的,所以纵向扫描算法就无法准确切割。如下图所示:
所以直接使用投影进行切割,这种方法是不可行的。我们需要对该算法进行优化,以便得出更为准确的结果。优化算法敬请期待下篇(文字切割算法-投影切割优化)。
项目源码:我的github(https://github.com/printlin/tmOcr/tree/master)
-
文字识别(三)--文字定位与切割
2019-02-18 11:10:30要做文字识别,第一步要考虑的就是怎么将每一个字符从图片中切割下来,然后才可以送入我们设计好的模型进行字符识别。现在就以下面这张图片为例,说一说最一般的字符切割的步骤是哪些。 当然,我们实际上要识别的... -
基于MATLAB的文字识别.rar
2021-02-02 16:53:10因为精力有限我准备的训练字库较少,你可以在压缩包train文件夹添加字库 。压缩包里面有个read me.txt里面有详细步骤。 -
OCR字符识别--文字切割算法-投影切割优化
2020-08-31 16:26:18在上文(文字切割算法-基于投影的切割)中发现切割结果并不是很理想,所以在本文提出优化算法对结果进行进一步处理。本算法的解决思路很简单,即针对已暴露出的问题进行解决,对于未暴露的问题就无能为力了。所以... -
基于Python的车牌识别(切割及识别)
2019-12-07 18:48:46基于Python的车牌识别(切割及识别) 上一篇博文简单的分享车牌定位,这次,将定位出来的车牌进行分割并识别出该字符。 1、车牌定位及提取 可参考上一篇博文,下方是提取出来的车牌 1、车牌二值化 def split_char... -
ocr文字识别技术
2018-08-31 17:41:13ocr文字识别训练,图片操作,切割,工具类,图片二值化等 -
OpenCV文字识别(三) :文字定位与切割(python)
2020-04-14 16:38:04总体思路:先切割行,再切割列,得到一张张字体图片并标号储存方便后续的识别。 其中切割的方法采用了投影法,即在二值化后判断每一行的黑白色素。 Python测试代码: import YuChuLi import cv2 import numpy as... -
Android+OpenCV 图像识别 切割 颜色 轮廓 计数
2021-09-28 11:29:48记录下来,这个Demo的主要功能是针对如下图所示的图形信息来进行切割,颜色识别,轮廓识别,以及计数。 1.首先是建立一个activi_main.xml(代码略) 2.MainActivity.java (1)切割 效果: 裁剪右下角区域 ... -
利用图像数字识别和图像切割实现自动批改小学生作业
2022-01-27 01:08:02对于图像识别,一般的套路是下面这样的(CNN卷积神经网络): 对于图像切割,一般的套路是下面的这样(横向纵向投影法): 既然思路能走得通,那么咱们先搞图像识别。准备数据->训练数据并保存模型->使用训练模型... -
文字识别样本图像集 多种干扰情况
2019-12-09 10:50:34归一化大小图像,用于文字识别训练或识别,含多种情况图,底纹干扰、亮度不一、部分反光、下划线等多种情况的样本集 -
以牌照搜题为例,简单分析文字切割与识别部分
2018-01-02 13:33:55自然场景下的文本区域检查、切割、识别与这里讨论的内容有一定差别。 ################################ 上半部分 ######################################## 前一段时间几个拍照搜题的软件挺流行(比如:... -
文字切割算法-基于投影的切割
2018-04-29 14:48:10前言: 文字识别的关键之所在就是单个文字的切割,切割的准确度极大的影响了文字识别的正确率。本文基于传统横纵投影的思想对文字进行切割,使用java与python实现了本算法。 基本思路: 1、横向扫描,切出每一行... -
文字识别-CRNN
2021-10-19 13:15:51(2)不需要对样本数据进行字符分割,可识别任意长度的文本序列 (3)模型速度快、性能好,并且模型很小(参数少) 下面将展开对这三个层进行介绍: (1)卷积层 ① 预处理 CRNN对输入图像先做了缩放处理,... -
场景文字识别中,将文本行切割为单字符
2017-08-01 16:11:37场景中的文字存在字符尺寸大小不一、间隔不等的情况,因此很难采用自动切割的方法将检测出的文本行切割为单字符。 这种情况下则需要手动切割为单字符,然后在进行归一化等处理。 本文使用C++写了一个手动切割的小... -
虹鱼图灵识别v1.1.3版(正版)
2018-12-24 11:28:02通过对图像使用滤镜处理为二值化后,切割得到的每个独立文字图像进行识别,根据设置的相似度进行筛选并得到最终识别结果,最后可生成一个被第三方任何编程语言调用的COM对象的独立dll文件。 截图介绍 主要核心用途... -
【图像分割】基于计算机视觉实现文字识别matlab代码
2021-12-26 11:51:07图片中文字的检测和识别是图片检索和标注的关键技术,该技术主要由3个部分组成:文字区域检测,图片文字分割和OCR识别。本文研究了其中的图片文字分割技术,提出了一种解决该问题的方法:首先对图片进行预处理,用非线性... -
横向切割图片,并识别
2020-05-27 17:51:15横向切割图片,再识别图片上的文字: ''' 按行将图片横切成多张小图 ''' import cv2 from PIL import Image from crnn.crnn_torch import crnnOcr as crnnOcr im = cv2.imread("picture7.jpg") img_size = im.... -
计算机OCR文字识别技术的原理和未来发展趋势
2021-07-16 07:37:47杨俊叶++王训伟摘要:文章首先对OCR技术的发展背景进行了介绍,指出了OCR文字识别系统在扫描仪、文字编辑等领域的应用及优势。通过对OCR技术工作原理的介绍,重点论述了OCR文字识别系统主要的图像处理模块、版面分析... -
文字识别技术OCR
2021-05-30 22:22:38OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。 我们就简单... -
《我的眼睛--图灵识别》第八章:训练:图像字符切割
2019-02-25 13:35:38图像字符切割是把图像上的每个文字分割成独立的单个字符,这是识别最有效的基础。 字符分割是图像识别最关键的一步,因为分割的正确与否直接关系到最后的结果,如果4个字符分割成了3个,即便后面的识别算法识别率... -
场景文字识别中英文字符图片
2017-08-01 16:19:18本图片为手动切割ICDAR2013比赛识别部分的数据集,一共分割出了2千多张单字符,希望能给大家提供帮助