使用百度API OCR 从图片中识别文字 DEMO,视频中的有些字体百度无法识别,出现不少汉字乱码,改讯飞的API可以较好的识别出汉字。
//************ 收起 复制 API Key
//************ 收起 复制 Secret Key
//
var json = OCRHelper.GetToken("API Key", "Secret Key");
var result = JsonConvert.DeserializeObject(json);
string token = result.access_token;
string fn = @"C:\Users\Administrator\source\repos\Video2GifTxt\bin\Debug\Images\0004.jpg";
OCRHelper.generalBasic(token, fn);
public class OCRHelper
{
public static string GetToken(string clientId, string clientSecret)
{
//https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=&client_secret=&
string requestUrl = $"https://aip.baidubce.com/oauth/2.0/token?client_id={clientId}&client_secret={clientSecret}&grant_type=client_credentials";
try
{
// 创建 HttpWebRequest 实例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
// 设置请求方法和超时(-1 表示不超时,对应原代码的 Timeout = -1)
request.Method = "POST";
request.Timeout = Timeout.Infinite;
// 设置请求头(与原代码一致的 Content-Type 和 Accept)
request.ContentType = "application/json";
request.Accept = "application/json";
// 原代码中请求体为空字符串,此处保持一致
string requestBody = "";
byte[] bodyBytes = Encoding.UTF8.GetBytes(requestBody);
// 设置请求体长度(必须,否则可能导致请求失败)
request.ContentLength = bodyBytes.Length;
// 写入请求体(即使为空也需写入空字节,确保请求格式正确)
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bodyBytes, 0, bodyBytes.Length);
}
// 发送请求并获取响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
// 读取响应内容
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
string responseContent = reader.ReadToEnd();
return responseContent;
}
}
}
catch (WebException ex)
{
// 若服务器返回错误响应,读取错误内容
if (ex.Response != null)
{
using (HttpWebResponse errorResponse = (HttpWebResponse)ex.Response)
using (Stream errorStream = errorResponse.GetResponseStream())
using (StreamReader errorReader = new StreamReader(errorStream, Encoding.UTF8))
{
string errorContent = errorReader.ReadToEnd();
return $"错误响应内容:{errorContent}";
}
}
return $"未知异常:{ex.Message}";
}
catch (Exception ex)
{
// 处理其他未知异常
return $"未知异常:{ex.Message}";
}
}
//https://console.bce.baidu.com/iam/#/iam/accesslist
//https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
//已创建2个,最多可创建20个
// 通用文字识别
public static string generalBasic(string token, string fn)
{
//https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic
string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + token;
host = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=" + token;
host= "https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting?access_token=" + token;
Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
request.Method = "post";
request.KeepAlive = true;
// 图片的base64编码
string base64 = getFileBase64(fn);
String str = "image=" + HttpUtility.UrlEncode(base64)+ "&language_type=CHN_ENG";
byte[] buffer = encoding.GetBytes(str);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
string result = reader.ReadToEnd();
//{"words_result":[{"words":"璞嗚鐐栭"},{"words":"STE W E D"},{"words":"R1BS A N D.G"},{"words":"RE E.N"},{"words":"BEAN S"},{"words":"璞嗚銆佹帓楠ㄩ兘鏄垜寰堝枩娆㈠悆鐨勯鏉?},{"words":"Both ribs and green beans are my favorites"},{"words":"銆侶ESHI"},{"words":"XIACHU,銆?}],"words_result_num":9,"log_id":1963870944209842937}
Console.WriteLine("通用文字识别:");
Console.WriteLine(result);
return result;
}
public static String getFileBase64(String fileName)
{
FileStream filestream = new FileStream(fileName, FileMode.Open);
byte[] arr = new byte[filestream.Length];
filestream.Read(arr, 0, (int)filestream.Length);
string baser64 = Convert.ToBase64String(arr);
filestream.Close();
return baser64;
}
}