Nhu cầu miêu tả
Lại là kỳ ba nhu cầu một ngày, sản phẩm cho một trương nguyên đồ
Yêu cầu thực hiện hiệu quả
Cái này kỳ thật hẳn là dùng Python thực hiện sẽ dễ dàng một ít, bất quá không ảnh hưởng Java cũng có thể
Sử dụng Đằng Tấn OCR tiếp lời
Phía chính phủ hồ sơ
Ấm áp nhắc nhở: Sử dụng bọn họ tiếp lời không phải miễn phí ác, lợi hại đại thần có thể chính mình đi huấn luyện một cái như vậy mô hình
Dẫn vào Đằng Tấn SDK
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-ocr</artifactId>
<version>3.1.923</version>
</dependency>
Phục chế thí dụ mẫu số hiệu
importcom.tencentcloudapi.common.Credential;
importcom.tencentcloudapi.common.profile.ClientProfile;
importcom.tencentcloudapi.common.profile.HttpProfile;
importcom.tencentcloudapi.common.exception.TencentCloudSDKException;
importcom.tencentcloudapi.ocr.v20181119.OcrClient;
importcom.tencentcloudapi.ocr.v20181119.models.*;
publicclassSmartStructuralOCRV2
{
publicstaticJSONObjectgetImgXYInfo(StringfilePath,Stringsux){
try{
// ví dụ thực tế hóa một cái chứng thực đối tượng, nhập tham yêu cầu truyền vào Đằng Tấn vân tài khoản SecretId cùng SecretKey, nơi này còn cần chú ý chìa khóa bí mật đối bảo mật
// số hiệu tiết lộ khả năng sẽ dẫn tới SecretId cùng SecretKey tiết lộ, cũng uy hiếp tài khoản hạ sở hữu tài nguyên an toàn tính. Dưới số hiệu thí dụ mẫu chỉ cung tham khảo, kiến nghị chọn dùng càng an toàn phương thức tới sử dụng chìa khóa bí mật, thỉnh tham kiến: https://cloud.tencent /document/product/1278/85305
// chìa khóa bí mật nhưng đi trước official website khống chế đài https://console.cloud.tencent /cam/capi tiến hành thu hoạch
Credentialcred=newCredential("SecretId","SecretKey");
// ví dụ thực tế hóa một cái http lựa chọn, nhưng tuyển, không có đặc thù nhu cầu có thể nhảy qua
HttpProfilehttpProfile=newHttpProfile();
httpProfile.setEndpoint("ocr.tencentcloudapi");
// ví dụ thực tế hóa một cái client lựa chọn, nhưng tuyển, không có đặc thù nhu cầu có thể nhảy qua
ClientProfileclientProfile=newClientProfile();
clientProfile.setHttpProfile(httpProfile);
// ví dụ thực tế hóa muốn thỉnh cầu sản phẩm client đối tượng,clientProfile là nhưng tuyển
OcrClientclient=newOcrClient(cred,"",clientProfile);
// ví dụ thực tế hóa một cái thỉnh cầu đối tượng, mỗi cái tiếp lời đều sẽ đối ứng một cái request đối tượng
SmartStructuralOCRV2Requestreq=newSmartStructuralOCRV2Request();
// phản hồi resp là một cái SmartStructuralOCRV2Response ví dụ thực tế, cùng thỉnh cầu đối tượng đối ứng
SmartStructuralOCRV2Responseresp=client.SmartStructuralOCRV2(req);
StringimageBinary=getImageBinary(filePath,sux);
// String imageBinary = getImageBinary( "D:\\code\\jsonFile\\src\\main\\java\\org\\example\\img\\dd.jpg", "jpg" );
req.setImageBase64(imageBinary);
// phát ra json cách thức tự phù xuyến hồi bao
System.out.println(SmartStructuralOCRV2Response.toJsonString(resp));
}catch(TencentCloudSDKExceptione){
System.out.println(e.toString());
}
}
}
Sinh thành base64 mã hóa
publicstaticStringgetImageBinary(StringimageFileName,Stringsuffix){
BASE64Encoderencoder=newBASE64Encoder();
FileimageFile=newFile(imageFileName);
try{
BufferedImagebufferedImage=ImageIO.read(imageFile);
ByteArrayOutputStreambaos=newByteArrayOutputStream();
ImageIO.write(bufferedImage,suffix,baos);
byte[]bytes=baos.toByteArray();
returnencoder.encodeBuffer(bytes).trim();
}catch(IOExceptione){
e.printStackTrace();
}
returnnull;
}
Thu hoạch đối ứng tọa độ
publicstaticvoidimt(Stringpath,Stringsux){
// phản hồi khi thí dụ mẫu
// String str = "{\" Angle\ ":-0.26950273,\" RequestId\ ":\" feb20204-d78e-445b-94e8-8808a2570f6b\ ",\" StructuralList\ ":[{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" tên họ \ "},\" Value\ ":{\" AutoContent\ ":\" Obama \ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1181,\" Y\ ":855},\" LeftTop\ ":{\" X\ ":1181,\" Y\ ":740},\" RightBottom\ ":{\" X\ ":1483,\" Y\ ":855},\" RightTop\ ":{\" X\ ":1483,\" Y\ ":740}}}}]}]},{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" giới tính \ "},\" Value\ ":{\" AutoContent\ ":\" nam \ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1178,\" Y\ ":1087},\" LeftTop\ ":{\" X\ ":1178,\" Y\ ":975},\" RightBottom\ ":{\" X\ ":1293,\" Y\ ":1087},\" RightTop\ ":{\" X\ ":1293,\" Y\ ":975}}}}]}]},{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" dân tộc \ "},\" Value\ ":{\" AutoContent\ ":\" Kenya \ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1741,\" Y\ ":1076},\" LeftTop\ ":{\" X\ ":1741,\" Y\ ":964},\" RightBottom\ ":{\" X\ ":2060,\" Y\ ":1076},\" RightTop\ ":{\" X\ ":2060,\" Y\ ":964}}}}]}]},{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" sinh ra \ "},\" Value\ ":{\" AutoContent\ ":\" 1961 năm ngày 4 tháng 8 \ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1186,\" Y\ ":1297},\" LeftTop\ ":{\" X\ ":1186,\" Y\ ":1205},\" RightBottom\ ":{\" X\ ":2127,\" Y\ ":1297},\" RightTop\ ":{\" X\ ":2127,\" Y\ ":1205}}}}]}]},{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" địa chỉ \ "},\" Value\ ":{\" AutoContent\ ":\" Washington đặc khu nghi tân pháp ni á đại đạo 1600 hào Nhà Trắng \ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1133,\" Y\ ":1759},\" LeftTop\ ":{\" X\ ":1133,\" Y\ ":1437},\" RightBottom\ ":{\" X\ ":1945,\" Y\ ":1759},\" RightTop\ ":{\" X\ ":1945,\" Y\ ":1437}}}}]}]},{\" Groups\ ":[{\" Lines\ ":[{\" Key\ ":{\" AutoName\ ":\" công dân thân phận dãy số \ "},\" Value\ ":{\" AutoContent\ ":\" 123456196108047890\ ",\" Coord\ ":{\" LeftBottom\ ":{\" X\ ":1668,\" Y\ ":2148},\" LeftTop\ ":{\" X\ ":1668,\" Y\ ":2036},\" RightBottom\ ":{\" X\ ":3116,\" Y\ ":2148},\" RightTop\ ":{\" X\ ":3116,\" Y\ ":2036}}}}]}]}],\" WordList\ ":[]}";
JSONObjectimgXYInfo=getImgXYInfo(path,sux);
// JSONObject imgXYInfo = getImgXYInfo( "D:\\code\\jsonFile\\src\\main\\java\\org\\example\\img\\dd.jpg", "jpg" );
// JSONObject imgXYInfo = JSONObject.parseObject(str);
JSONArraystructuralList=imgXYInfo.getJSONArray("StructuralList");
for(Objecta:structuralList){
JSONObjectjsonObject=JSONObject.parseObject(String.valueOf(a));
JSONArraygroups=jsonObject.getJSONArray("Groups");
for(Objectgroup:groups){
JSONObjectjsonObjectG=JSONObject.parseObject(String.valueOf(group));
JSONArraylines=jsonObjectG.getJSONArray("Lines");
for(Objectline:lines){
JSONObjectjsonObjectL=JSONObject.parseObject(String.valueOf(line));
JSONObjectobjectLJSONObject=jsonObjectL.getJSONObject("Value");
JSONObjectcoord=objectLJSONObject.getJSONObject("Coord");
JSONObjectleftTop=coord.getJSONObject("LeftTop");
JSONObjectrightTop=coord.getJSONObject("RightTop");
JSONObjectrightBottom=coord.getJSONObject("RightBottom");
// JSONObject leftBottom = coord.getJSONObject( "LeftBottom" );
Integerx=leftTop.getInteger("X");
Integery=leftTop.getInteger("Y");
Integerrx=rightTop.getInteger("X");
Integerry=rightBottom.getInteger("Y");
Integerwidth=rx-x;
Integerheight=ry-y;
// System.out.println(x);
// System.out.println(y);
// System.out.println(rx);
// System.out.println(ry);
// System.out.println(width);
// System.out.println(height);
drawAndGetPictureUrl(path,sux,x,y,width,height,Color.RED);
}
}
}
}
Đánh dấu phương pháp
/**
*
* @param originalPicture nguyên thủy hình ảnh địa chỉ
* @param x: Nên tham số dùng cho phản hồi kiểm tra đo lường khung góc trái phía trên vị trí tọa độ ngang ( x ) nơi độ phân giải vị trí, kết hợp còn thừa tham số nhưng duy nhất xác định kiểm tra đo lường khung lớn nhỏ cùng vị trí.
* @param y: Nên tham số dùng cho phản hồi kiểm tra đo lường khung góc trái phía trên vị trí tung độ ( y ) nơi độ phân giải vị trí, kết hợp còn thừa tham số nhưng duy nhất xác định kiểm tra đo lường khung lớn nhỏ cùng vị trí.
* @param width: Nên tham số dùng cho phản hồi kiểm tra đo lường khung độ rộng ( từ góc trái phía trên xuất phát ở x trục hướng hữu kéo dài chiều dài ), kết hợp còn thừa tham số nhưng duy nhất xác định kiểm tra đo lường khung lớn nhỏ cùng vị trí.
* @param height: Nên tham số dùng cho phản hồi kiểm tra đo lường khung độ cao ( từ góc trái phía trên xuất phát ở y trục xuống phía dưới kéo dài chiều dài ), kết hợp còn thừa tham số nhưng duy nhất xác định kiểm tra đo lường khung lớn nhỏ cùng vị trí.
* @param drawColor: Khung ảnh lồng kính nhan sắc
* @return
* @throws Exception
*/
privatestaticvoiddrawAndGetPictureUrl(StringoriginalPicture,Stringsux,intx,inty,intwidth,intheight,ColordrawColor){
BufferedImagebufferedImage=null;
// đọc lấy hình ảnh văn kiện, được đến BufferedImage đối tượng
try{
if(StringUtils.isEmpty(originalPicture)){
System.out.println("Vẽ hình ảnh thất bại: Nguyên thủy hình ảnh địa chỉ vì không");
return;
}
InputStreaminputStream=newFileInputStream(originalPicture);
// HttpURLConnection connection = (HttpURLConnection) new URL(originalPicture).openConnection();
// connection.setRequestMethod( "GET" );
// if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// inputStream = connection.getInputStream();
// }
bufferedImage=ImageIO.read(inputStream);
// được đến Graphics2D đối tượng
Graphics2Dg2D=(Graphics2D)bufferedImage.getGraphics();
// thiết trí nhan sắc, bút vẽ phẩm chất
g2D.setColor(drawColor);
g2D.setStroke(newBasicStroke(5));
// vẽ hình chữ nhật
g2D.drawRect(x,y,width,height);
g2D.setFont(newFont("",Font.BOLD,40));
// vẽ văn tự
g2D.drawString("("+x+","+y+")",x-50,y);
g2D.drawString("("+x+","+(y+height)+")",x-100,y+height+50);
g2D.drawString("("+(x+width)+","+y+")",x+width-50,y);
g2D.drawString("("+(x+width)+","+(y+height)+")",x+width-100,y+height+50);
// g2D.drawString(x+ "", x-50, y);
// g2D.drawString((y + height) + "", x, y+ height +50);
// g2D.drawString( "" + (x + width), x + width -50, y);
// g2D.drawString( (y + height) + "", x + width, y+ height + 50);
ByteArrayOutputStreamos=newByteArrayOutputStream();
StringsavePath=originalPicture;
ImageIO.write(bufferedImage,sux,newFileOutputStream(savePath));
}catch(Exceptione){
e.printStackTrace();
// System.out.println( "Vẽ hình ảnh thất bại:, Nguyên hình ảnh: {},error:{}", originalPicture, e);
}
}
Chỉ định mục lục hạ đánh dấu
publicstaticvoidmain(String[]args)throwsException{
Filefile=newFile("D:\\code\\jsonFile\\src\\main\\java\\org\\example\\img");
File[]files=file.listFiles();
Integeri=0;
Integerer=0;
for(Filef:files){
if(f.isDirectory()){
FiletypeFile=newFile(f.toString());
File[]listFiles=typeFile.listFiles();
for(FilelistFile:listFiles){
StringimgPath=listFile.toString();
String[]split=imgPath.split("\\.");
try{
imt(imgPath,split[1]);
System.out.println("Đánh dấu hoàn thành"+++i);
}catch(Exceptione){
System.out.println("Đánh dấu thất bại"+++er);
}
}
}
if(f.isFile()){
StringimgPath=f.toString();
String[]split=imgPath.split("\\.");
try{
imt(imgPath,split[1]);
System.out.println("Đánh dấu hoàn thành"+++i);
}catch(Exceptione){
System.out.println("Đánh dấu thất bại"+++er);
}
}
}
System.out.println("OK");
// drawAndGetPictureUrl( "asa",200,600,500,100,Color.RED);
// System.out.println(imgXYInfo);
// JSONObject imgXY = getImgXY( "" );
// System.out.println(imgXY);
// int width = 283;
// int height = 355;
// int y = 20;//top
// int x = 149;//left
// drawAndGetPictureUrl( "https://tse2-mm.cn.bing.net/th/id/OIP-C.duz6S7Fvygrqd6Yj_DcXAQHaF7?rs=1&pid=ImgDetMain",x, y, width, height, Color.RED);
}
Hiệu quả triển lãm
Khuyết tật
Chỉ có thể làm tốt tương đối tương đối tốt hình ảnh, đối với hình ảnh bị xoay tròn hoặc là hình ảnh bất quy tắc đánh dấu ra tới vẫn là có nhất định khác biệt cùng khuyết tật, hơn nữa nghiêm trọng ỷ lại kẻ thứ ba ocr phân biệt tiếp lời.