首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AI 最佳实践|用腾讯云智能文本图像增强打造一个掌上扫描仪

AI 最佳实践|用腾讯云智能文本图像增强打造一个掌上扫描仪

原创
作者头像
腾讯云AI
发布于 2023-04-26 01:15:49
发布于 2023-04-26 01:15:49
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

在日常生活、工作中, 受限于拍照技术、拍摄条件等制约,得到的文本图像往往存在光照不均、角度倾斜、文字模糊等情况。这种低质量的文本图像不仅不利于保存和后续研究,也不利于光学字符识别。为了解决以上问题,特别调研了业内相关的产品,发现腾讯云AI的文本图像增强能力可以很好的打造一个掌上扫描仪。

具体来说,软件底层采用计算机视觉技术,面向文本类图片场景提供图像处理服务,包括切边增强、弯曲矫正、阴影去除、摩尔纹去除等能力,可以有效优化文档类的图片质量,提升文字的清晰度,极大提高了低质量的文本图像的质量;用户操作方便只需要上传需要增强的文本图像,就可以自动处理图像,待图像处理完成后,用户就可以下载增强后的图片。

接下来,我将详细讲述掌上扫描仪的实现过程。

一、准备工作

为了使用腾讯云文本图像增强能力,我做了以下几个准备工作。

1.1、开通文本图像增强功能

在使用腾讯云文本图像增强之前,通过腾讯云官网开通文本图像增强服务。

服务开通成功后,腾讯云AI文字识别赠送了免费的资源包,其中文本图像增强1000次免费额度,可以在资源包管理页面查看资源包使用情况。

通过使用我发现在设置页面开通了后付费服务,这样就不用担心资源包耗尽导致调用接口失败了,但是后付费设置每月只能变更一次。

1.2、控制台监控信息

经过使用,我了解到所有文字识别服务的使用情况都可以在控制台中查看使用信息,可以从下图看到统计出当前月份的调用情况、计费情况、成功数、成功率等。

二、操作流程

通过以下几个步骤,就可以使用腾讯云AI文字识别的图像增强功能制作掌上扫描仪。

  1. 获取个人密钥
  2. 查看图像增强API文档
  3. 使用腾讯云AI文字识别的图像增强功能制作掌上扫描仪
2.1、获取个人密钥

在腾讯云访问管理API密钥管理页面,我们新建一个个人密钥。

复制生成的密钥,可以点击这里直达

2.2、图像增强API接口说明

可以在API Explorer中选择文字图像增强—输入参数—选择需要的语言—即可生成对应语言的API调用代码。

2.3、使用腾讯云AI文字识别的图像增强功能制作掌上扫描仪

掌上扫描仪产品实现过程中主要分为一下几个步骤:

  1. 安装环境依赖的SDK
  2. 调用图像增强接口
  3. 体验掌上扫描仪的效果

2.3.1 安装环境依赖的SDK

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#	安装公共基础包
go get -v -u github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common
#	安装对应的产品包(如 CVM)
go get -v -u github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm
#	一次性下载腾讯云所有产品的包
go get -v -u github.com/tencentcloud/tencentcloud-sdk-go

2.3.2 调用图像增强接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package imageenhancement

import (
	"encoding/base64"
	"fmt"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
	ocr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ocr/v20181119"
	"io/ioutil"
	"os"
	"testing"
)

//MainImageEnhancement 主函数
func MainImageEnhancement(imagesPath string) {
	//图片地址
	
	// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
	// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
	credential := common.NewCredential(
		 //这里填入腾讯云账户密钥对
		 "SecretId",
         "SecretKey",
	)
	// 实例化一个client选项,可选的,没有特殊需求可以跳过
	cpf := profile.NewClientProfile()
	cpf.HttpProfile.Endpoint = "ocr.tencentcloudapi.com"
	// 实例化要请求产品的client对象,clientProfile是可选的
	client, _ := ocr.NewClient(credential, "ap-guangzhou", cpf)
	//读取图片base64
	toBase64Str, err := imageToBase64(imagesPath)
	respImages, err := imageType208(*client, toBase64Str)
	if err != nil {
		return
	}
	err = writeFile("test.jpg", *respImages)
	if err != nil {
		return
	}
}

//imageType1 切边增强
func imageType1(client ocr.Client, toBase64Str string) (*string, error) {
	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := ocr.NewImageEnhancementRequest()
	request.ImageBase64 = common.StringPtr(toBase64Str)
	request.ReturnImage = common.StringPtr("preprocess")
	request.TaskType = common.Int64Ptr(1)

	// 返回的resp是一个ImageEnhancementResponse的实例,与请求对象对应
	response, err := client.ImageEnhancement(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return nil, err
	}
	if err != nil {
		return nil, err
	}
	return response.Response.Image, nil
}

//imageType2 弯曲矫正
func imageType2(client ocr.Client, toBase64Str string) (*string, error) {
	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := ocr.NewImageEnhancementRequest()
	request.ImageBase64 = common.StringPtr(toBase64Str)
	request.ReturnImage = common.StringPtr("preprocess")
	request.TaskType = common.Int64Ptr(2)

	// 返回的resp是一个ImageEnhancementResponse的实例,与请求对象对应
	response, err := client.ImageEnhancement(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return nil, err
	}
	if err != nil {
		return nil, err
	}
	return response.Response.Image, nil
}

//imageType202 黑白模式
func imageType202(client ocr.Client, toBase64Str string) (*string, error) {
	// 实例化一个请求对象,每个接口都会对应一个request对象
	request := ocr.NewImageEnhancementRequest()
	request.ImageBase64 = common.StringPtr(toBase64Str)
	request.ReturnImage = common.StringPtr("preprocess")
	request.TaskType = common.Int64Ptr(202)

	// 返回的resp是一个ImageEnhancementResponse的实例,与请求对象对应
	response, err := client.ImageEnhancement(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Printf("An API error has returned: %s", err)
		return nil, err
	}
	if err != nil {
		return nil, err
	}
	return response.Response.Image, nil
}

... //这里省略重复的部分,可以扩展其他模式或者任意模式组合

//writeFile base64转image
func writeFile(path string, s string) error {
	//解析base64字符串
	dist, _ := base64.StdEncoding.DecodeString(s)
	//写入新文件
	f, _ := os.OpenFile(path, os.O_RDWR|os.O_CREATE, os.ModePerm)
	defer f.Close()
	_, err := f.Write(dist)
	return err
}

//imageToBase64 img转base64
func imageToBase64(filePath string) (string, error) {
	srcByte, err := ioutil.ReadFile(filePath)
	if err != nil {
		return "", err
	}
	res := base64.StdEncoding.EncodeToString(srcByte)
	return res, nil
}

2.3.3 体验掌上扫描仪的效果

1)角度矫正

原始图片:

切边增强后图片:

经过角度矫正后,可以从上图中看出,角度矫正后的图片更加凸显文本内容,提高了文本图像的质量。

2)弯曲矫正

原始图片:

矫正后图像:

经过弯曲矫正后,可以从上图中看出,弯曲矫正后的图片文本更加清晰,提高了文本图像的质量。

3)去除摩尔纹

原始图片:

去除摩尔纹后的图片:

经过去除摩尔纹处理,很大程度的提高了文本图像的清晰度,排除了摩尔纹的干扰,提高了文本图像的质量。

4)去除阴影

原始图片:

去除阴影后的图片:

经过去除阴影处理,解决了因为环境因素对文本图像质量造成的影响,提高了文本图像的质量。

2.3.4 总结

影响文本图像质量清晰程度有很多因素,室外光照度不均匀会造成图像灰度过于集中;摄像头获得的文本图像经过数/模转换,线路传输时都会产生噪声污染,文本图像质量不可避免降低,轻者表现为文本图像伴有噪点,难于看清文本图像细节;重者文本图像模糊不清,连大概文字轮廓都难以看清。因此,对图像进行分析处理之前,必须对图像进行改善。通过腾讯云AI的文本图像增强创造的掌上扫描仪解决了大部分文本图像不清晰的问题,提高了文本图像的质量。

腾讯云智能文字识别:https://cloud.tencent.com/product/ocr

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手|50行Python代码教你爬取猫眼电影TOP100榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫架构中的HTML下载器、HTML解析器、数据存储器三大模块:
Python数据科学
2018/08/06
4860
手把手|50行Python代码教你爬取猫眼电影TOP100榜所有信息
利用requests和正则表达式抓取猫眼电影top100
刚学了正则表达式,赶紧用它来练练手,以防搞忘了。这次练习的目标比较简单,就是爬取猫眼电影top100,具体包括电影排名,片名,主演,上映时间,评分等信息。最后存储为txt文件。和爬取豆瓣电影电影top250十分类似。
爱吃西瓜的番茄酱
2018/07/25
5700
利用requests和正则表达式抓取猫眼电影top100
正则表达式爬取猫眼电影
正则表达式爬取猫眼电影Top100 import requests import re,json from multiprocessing import Pool def get_one_page(
zhang_derek
2018/08/10
4140
python爬取猫眼电影TOP100榜
给大家演示下关于python爬取猫眼电影TOP100榜相关信息的实例,包含电影排名,电影名称,主演,上映时间,评分等信息,及讲解下爬取过程中遇到的相关知识点。
崔笑颜
2020/07/14
8220
python爬取猫眼电影TOP100榜
python爬虫获取猫眼电影Top100信息和图片,原来也不是很难
有一段时间没写关于爬虫的博客了,距离上一次自学爬虫已经过去了有一年的时间。想起刚写博客那会,没有什么粉丝,写关于大数据技术的博客受众面不是很广,所以基本上不怎么涨粉。每次涨粉都是因为那段时间分享的几篇关于爬虫入门的几个小Demo,像图片下载器,酷狗Top250,稍微难一点的像爬取拉勾网等等,至今历历在目…
大数据梦想家
2021/01/27
1.4K0
python爬虫获取猫眼电影Top100信息和图片,原来也不是很难
50 行代码教你爬取猫眼电影 TOP100 榜所有信息
来源:程序人生 ID:coder_life 今天,手把手教你入门 Python 爬虫,爬取猫眼电影 TOP100 榜信息。 作者 | 丁彦军 对于 Python 初学者来说,爬虫技能是应该是最好入门
小小科
2018/05/04
9050
50 行代码教你爬取猫眼电影 TOP100 榜所有信息
爬取TOP100的电影
最近在学习requests库和正则表达式,今天就利用这两个知识点来抓取猫眼电影TOP100的相关内容。
stormwen
2019/08/05
4580
猫眼Top100
import json from multiprocessing import Pool import requests import re from requests.exceptions import RequestException headers = { 'Host': 'maoyan.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Geck
林清猫耳
2018/06/13
5320
爬取猫眼电影TOP100
本项目基本目标:在猫眼电影中把top100的电影名,排名,海报,主演,上映时间,评分等爬取下来
py3study
2020/01/19
4500
爬取猫眼电影TOP100
50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫架构中的HTML下载器、HTML解析器、数据存储器三大模块:
顶级程序员
2018/07/23
4890
Python爬虫实战:抓取猫眼电影排行榜top100
本节中,我们利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。requests 比 urllib 使用更加方便,而且目前我们还没有系统学习 HTML 解析库,所以这里就选用正则表达式来作为解析工具。
仲君Johnny
2024/02/05
6890
Python爬虫实战:抓取猫眼电影排行榜top100
Python 爬取猫眼电影最受期待榜
    主要爬取猫眼电影最受期待榜的电影排名、图片链接、名称、主演、上映时间。   思路:1.定义一个获取网页源代码的函数;      2.定义一个解析网页源代码的函数;      3.定义一个将解析的数据保存为本地文件的函数;      4.定义主函数;      5.使用多进程爬取。 步骤一:首先,导入相关的库: import requests import re import json from multiprocessing import Pool from requests.exceptions
希希里之海
2018/05/16
8050
正则爬取猫眼电影
设置headers的主要目的就是防止用户请求被请求页面判定为恶意请求,最基本的就是要让用户的请求模拟浏览器请求的方式。通常在headers设置user-agent来起到模拟浏览器的方式。
听城
2018/08/30
5050
Python爬虫项目--爬取猫眼电影To
1. 浏览器打开猫眼电影首页, 点击"榜单", 点击"Top100榜", 即可看到目标页面. 
py3study
2020/01/19
8210
Python爬虫项目--爬取猫眼电影To
Python3网络爬虫实战-27、Req
本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HTML 的解析库不是很了解,所以本节我们选用正则表达式来作为解析工具。
py3study
2020/01/09
6060
Python3网络爬虫实战-27、Req
Python | 50行代码爬取猫眼 top100
好久不见,已经有一个月没更新了。主要是因为最近工作特别忙,上班要撸 java, 撸完 java,又要撸前端。真的是忙到 x 生活都没时间(说的好像不忙就有一样),手动滑稽。话不多说了,因为工作的原因,所以我的 Python 学的特别慢,学了许久,终于接触到爬虫了。那今天给你们带来的就是一个简单的静态网页的爬取:requests + 正则爬取猫眼 top100
JavaFish
2019/10/17
7770
Python | 50行代码爬取猫眼 top100
使用requests+正则表达式爬取猫眼电影排行
本节中,我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容。requests比urllib使用更加方便,而且目前我们还没有系统学习HTML解析库,所以这里就选用正则表达式来作为解析工具。 1. 本节目标 本节中,我们要提取出猫眼电影TOP100的电影名称、时间、评分、图片等信息,提取的站点URL为http://maoyan.com/board/4,提取的结果会以文件形式保存下来。 2. 准备工作 在本节开始之前,请确保已经正确安装好了requests库。如果没有安装,可以参考第1章
崔庆才
2018/04/18
1.5K0
使用requests+正则表达式爬取猫眼电影排行
如何抓取猫眼电影Top100的影片信息?
对于喜好电影的同学来说,猫眼电影和豆瓣电影应该是比较熟悉的电影评分的平台。但是,如何通过Python抓取猫眼电影评分前100的信息呢?
测试小兵
2019/11/20
5610
如何抓取猫眼电影Top100的影片信息?
几十行代码爬取猫眼电影Top100榜单
猫眼电影的网址为:http://maoyan.com/,但这不是我们此次想爬取的站点,我们爬取的站点是这个:http://maoyan.com/board/4(TOP100榜单)
润森
2022/08/18
1.3K0
几十行代码爬取猫眼电影Top100榜单
多种方法爬取猫眼电影并分析(附代码)
摘要: 作为小白,爬虫可以说是入门python最快和最容易获得成就感的途径。因为初级爬虫的套路相对固定,常见的方法只有几种,比较好上手。选取网页结构较为简单的猫眼top100电影为案例进行练习。 重点是用上述所说的4种方法提取出关键内容。一个问题采用不同的解决方法有助于拓展思维,通过不断练习就能够灵活运用。
Python中文社区
2018/12/11
6.5K0
多种方法爬取猫眼电影并分析(附代码)
相关推荐
手把手|50行Python代码教你爬取猫眼电影TOP100榜所有信息
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档