程序基本目的是实现提取图片中的文字。做了一个winfrom界面,接了腾讯云的OCR图片识别。
这里接入文档就不给出了,想看的直接去腾讯云看接入文档即可。

由于想做跨平台的应用。分析了接入文档,并且之前想做一个web界面接口的,但是无奈javascript技术不到家,表单传递时的header头问题迟迟没有解决。
所有就在我的网站里弄了一个接口来计算我的Authorization,计算方法是直接采用腾讯给出的标准文档中的方法。直接把计算结果echo到web上。
而我windows上采用的是C#编程。主要想法就是先使用HTTPREQUEST方法做一个简单的爬虫。具体方法在我之前的博客《C#使用Winfrom编程时的注意事项》有讲过到。具体链接:https://blog.csdn.net/qq_27180763/article/details/82949365
主要还是卡在了header传值的问题。由于Authorization不是标准Header值,需要采用别的方式来进行传递。这是比较需要注意的。
这个地方我主要采用了Content-Type=application/x-www-form-urlencoded,用POST方法把上传文件到腾讯云的API接口,然后接受返回值而已。
接受的时候也要注意,由于收到的信息是JSON码的形式,需要自己下载一个Newtonsoft.Json.dll的文件,并加入解决方案的引用当中。然后命名空间引用

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

这样就可以直接使用JObject对象来转换string型的json对象。并采用json标准来进行对象的访问。

C# Winfrom的界面就不具体放出,我先给出C#的代码。

Windows下的代码

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows.Forms;namespace PDF转WORD
{public partial class Form2 : Form{private string filename="";public Form2(){InitializeComponent();System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;this.Text = "图片转PDF";}private void button1_Click(object sender, EventArgs e){OpenFileDialog fileDialog = new OpenFileDialog();fileDialog.Multiselect = true;fileDialog.Title = "请选择文件";fileDialog.Filter = "(*jpg*)|*.jpg*||(*.jpg*)||*.*";if (fileDialog.ShowDialog() == DialogResult.OK){string file = fileDialog.FileName;filename = file;label2.Text = filename.ToString();MessageBox.Show("选择成功!");}}private void POST_DATA() {HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(@"我的web服务器"));req.Method = "POST";req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0";req.ContentType = "application/x-www-form-urlencoded";req.Accept = "application/json";string result1 = "";StringBuilder builder = new StringBuilder();byte[] data = Encoding.UTF8.GetBytes(builder.ToString());req.ContentLength = data.Length;using (Stream reqStream = req.GetRequestStream()){ reqStream.Write(data, 0, data.Length); reqStream.Close(); }HttpWebResponse resp = (HttpWebResponse)req.GetResponse();Stream stream = resp.GetResponseStream();//获取响应内容         using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)){ result1 = reader.ReadToEnd(); }HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri("http://recognition.image.myqcloud.com/ocr/general"));Stream memStream = new MemoryStream();webReq.Method = "POST";string boundary = "--------------" + DateTime.Now.Ticks.ToString("x");// 边界符 webReq.ContentType = "multipart/form-data; boundary=" + boundary;byte[] enter = Encoding.ASCII.GetBytes("\r\n");  //换行memStream.Write(enter, 0, enter.Length);Dictionary<string, string> dic = new Dictionary<string, string>(){{"appid","你的APPID"}};//写入文本字段string inputPartHeaderFormat = "--" + boundary + "\r\n" + "Content-Disposition:form-data;name=\"{0}\";" + "\r\n\r\n{1}\r\n";foreach (var kv in dic){string inputPartHeader = string.Format(inputPartHeaderFormat, kv.Key, kv.Value);var inputPartHeaderBytes = Encoding.ASCII.GetBytes(inputPartHeader);memStream.Write(inputPartHeaderBytes, 0, inputPartHeaderBytes.Length);}var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);// 写入文件 string imagePartHeader = "--" + boundary + "\r\n" +"Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +"Content-Type: image/jpeg\r\n\r\n";var header = string.Format(imagePartHeader, "image", "1.jpg");var headerbytes = Encoding.UTF8.GetBytes(header);memStream.Write(headerbytes, 0, headerbytes.Length);var buffer = new byte[1024];int bytesRead;while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0){memStream.Write(buffer, 0, bytesRead);}byte[] endBoundary = Encoding.ASCII.GetBytes("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "\r\n" + boundary + "--\r\n");memStream.Write(endBoundary, 0, endBoundary.Length);webReq.ContentLength = memStream.Length;webReq.Headers.Add(HttpRequestHeader.Authorization, result1);webReq.Host = "recognition.image.myqcloud.com";var requestStream = webReq.GetRequestStream();memStream.Position = 0;memStream.CopyTo(requestStream);HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);var ret = sr.ReadToEnd();sr.Close();response.Close();requestStream.Close();memStream.Close();JObject content_info = JObject.Parse(ret);
//这里就是主要的对返回的json的处理了for (int i = 0; i < content_info["data"]["items"].Count(); i++){try{richTextBox1.AppendText(content_info["data"]["items"][i]["itemstring"].ToString());}catch (Exception e){MessageBox.Show(e.ToString());}}}private void button2_Click(object sender, EventArgs e){if(filename!=""){Thread th1 = new Thread(POST_DATA);th1.IsBackground = true;th1.Start();}else {MessageBox.Show("请先选择图片。", "提示!");}}private void button3_Click(object sender, EventArgs e){filename = "";if (filename == ""){label2.Text = "暂未选择图片";MessageBox.Show("清空成功!");}}private void button4_Click(object sender, EventArgs e){richTextBox1.Clear();}}
}

以上就是主要界面的代码。而主界面的代码就不再放出,我先给出windows下的实验效果。(照片带水印)

Windows下的效果

LINUX上的代码实现(ubuntu)

用python实现的,所以代码比较简洁。主要用到的函数库为requests
没什么需要注意的==毕竟python比较简单。直接安装官方给的文档设置image和header就可以了。话不多说直接上代码QWQ

#!/usr/bin/env python
#encoding=utf-8
import re
import sys,os
import requests
def GetAuthorization():html = requests.post(url="我的WEB服务器地址")html = html.textinfo = html.split("\n")return info[1].replace("\n","")Authorization = str(GetAuthorization().replace("\n","").replace("\r",""))
def createRequest(filepath):global Authorizationheaders = {'host':'recognition.image.myqcloud.com','Authorization':Authorization}files = {'appid':(None,'你的appid'),'image':('1.jpg',open(filepath,'rb'),'image/jpeg')}r = requests.post("http://recognition.image.myqcloud.com/ocr/general", files=files,headers=headers)  responseinfo = r.contentdata = responseinfo.decode('utf-8')print data   r_index = r'itemstring":"(.*?)"'result = re.findall(r_index, data)for i in result:print(i)def main():createRequest(sys.argv[1])if __name__ == '__main__':main()

程序的第一个参数就是你要上传文件的绝对路径==就是一个普通脚本,没有什么很大的技术难度。
我要处理的照片还是上面那张,现在给出扫描结果。

LINUX下的效果图

C#Winfrom和PYTHON接入腾讯云OCR相关推荐

  1. C#接入腾讯云OCR照片识别的软件更新

    原有版本:https://blog.csdn.net/qq_27180763/article/details/83863144 现有版本: 1.增加了多张图片同时上传功能 2.增加日志系统 3.增加了 ...

  2. 接入腾讯云识别图片中的文字并保存(数学建模)

    在数学建模中会遇到对图片中的文字进行识别提取,保存到excel中,以下进行操作: 1.在腾讯云中开通业务,每个月有免费额度,虽然识别也会不准,但还算亲民,具体操作可参考官方文档文字识别 一分钟接入服务 ...

  3. 微信公众号HTML5接入腾讯云人脸核身

    微信公众号HTML5接入腾讯云人脸核身 概述 接入流程 原生H5对行业的要求 概述 针对微信公众号接入腾讯云,腾讯云提供了两种方案,一种是通用H5接入,另外一种是通过微信的原生H5来接入,但是一般都是 ...

  4. 骐俊CAT1模组 - MQTT接入腾讯云平台篇

    本次实验使用骐俊ML110S系列模组及开发底板,通过MQTT协议采用密钥的方式接入腾讯云平台,实现消息的发布及订阅,可分为接入注册及动态注册两种方式.   设备注册(接入注册) A.进入腾讯云平台注册 ...

  5. python刷新腾讯云cdn

    程序需要使用python3,使用前需获取腾讯云SecretID和SecretKey. # -*- coding:utf-8 -*- __author__ = 'wx' import hashlib i ...

  6. LR1110接入腾讯云

    LR1110接入腾讯云 前言 第一章 网关介绍 第二章 定位原理 第三章 平台搭建 固件烧录 腾讯云平台搭建 创建LoRa网关 LR1110设备创建 位置服务 前言 随着物联网的进步,位置信息作为一个 ...

  7. ESP32接入腾讯云物联网开发平台

    文章目录 前言 1 资料参考 2 对接总体思路 3 代码移植 3.1 component qcloud_iot 3.2 项目顶层处理 3.3 component main 4 移植问题备忘 CMake ...

  8. Android 快速接入腾讯云人脸核身(识别)

    Android 通过 SDK 快速接入腾讯云人脸核身 我的接入代码:https://blog.csdn.net/qq_39836064/article/details/108702725,很久之前写的 ...

  9. RAK7258 LoRaWAN 网关接入腾讯云物联网开发平台

    文章目录 前言 1 控制台操作 LoRa 网关 2 RAK 7258 LoRa网关实物操作 连接配置 网络配置 LoRa参数配置 网关上线确认 END 前言 这篇笔记记录采用 RAK7258 LoRa ...

最新文章

  1. 两个git库之间迁移_Python 3 迁移怨声载道
  2. Gmapping从开始到放弃—写一个TF 广播
  3. 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)
  4. [转]密码技术-实现数字信封和数字签名
  5. vue 设置代理报错;occurred while trying to proxy request xxx
  6. python学习笔记-day6-【python如何写excel表】
  7. python蛇术_小蛇学python(16)numpy高阶用法
  8. 直接用自己服务器做图床可以吗_图床趣事
  9. 汽车行业用户观点主题及情感分析,深度学习方案rank1
  10. 小程序(仿微信发布说说功能)
  11. c语言的api_为什么C语言依然是必学的编程语言?
  12. 中文人物关系图谱构建与应用项目(人物关系抽取,关系抽取评测)
  13. geoserver发布shp格式的图层 实现步骤(含图).doc
  14. BW数据加载后不能实时刷新到水晶易表解决方法
  15. java对象的封装继承和多肽_java零基础入门第七天 继承 多肽 重写 重载
  16. Elasticsearch怎样实现自定义分词
  17. 手把手教你如何用Python从PDF文件中导出数据(附链接)
  18. linux 极路由救砖,极路由救砖方法?
  19. jQuery 选择器 选取 class 为 intro 的 p 元素
  20. 内网安全-域横向CobaltStrikeSPNRDP

热门文章

  1. 视频教程-Excel条件格式实战视频课程【你学得会】-Office/WPS
  2. 如何查看自己的分机号
  3. JavaScript在数组中寻找相同对象元素的问题
  4. 【Python】shape的用法
  5. 零基础学习PHP编程——基本概念详解之域名解析与DNS缓存
  6. 海康卫视摄像头截图与展示
  7. CMD 打开当前文件夹
  8. 【C#】WixToolset快速入门教程
  9. 为什么一定要给孩子找个程序员爸爸?
  10. 核密度估计(KDE)