Java thực hiện số liệu đánh dấu công năng

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.

0.0013021 0.0078125 0.0013021 0.0013021 0.0026042 0.0026042 0.0078125 0.0091146 0.0039063 0.0039063 0.0013021 0.0052083 0.014323 0.010417 0.0078125 0.0013021 0.0039063 0 0.0065104 0.0026042 0.0065104 0.0078125 0.0065104 0.0013021 0.010417 0.0039063 0.011719 0.0052083 0.0013021 0.019531 0.0052083 0.0013021 0.0052083 0.0039063 0.0039063 0.0013021 0.0052083 0.022135 0.0039063 0.0065104 0.0078125 0.0039063 0.0013021 0.0026042 0.0039063 0.0052083 0.0078125 0.0039063 0.0052083 0.0013021 0 0.0052083 0.0052083 0.0065104 0.0039063 0.0026042 0.0052083 0.0026042 0.0026042 0.0039063 0.0026042 0.0039063 0.0013021 0.0052083 0.0039063 0.0039063 0 0.0052083 0 0.0065104 0.0026042 0.0065104 0 0.0052083 0 0.0013021 0.0026042 0.0052083 0.0065104 0.0078125 0.0052083 0 0.010417 0.0091146 0.0052083 0.0052083 0.0065104 0.0013021 0.0078125 0.0052083 0.0052083 0.0091146 0.0065104 0.0052083 0.011719 0.0026042 0.0078125 0.0078125 0.0039063 0 0.0052083 0.0039063 0.0039063 0.0026042 0.0091146 0.0039063 0.011719 0.0026042 0.0091146 0.0039063 0.0013021 0.016927 0.0013021 0.0013021 0.0013021 0.0052083 0.0013021 0.0013021 0.0013021 0.0026042 0.0026042 0.0065104 0.0065104 0.0039063 0.0091146 0.0026042 0.0039063 0.0039063 0.011719 0.0078125 0.010417 0 0.0039063 0 0.0013021 0.0013021 0.0026042 0.0091146 0.0052083 0.0039063 0.0013021 0.0039063 0.0039063 0.013021 0.0026042 0.058594 0.0052083 0.0078125 0.0065104 0.0039063 0.0026042 0.0026042 0.0078125 0.0052083 0.0078125 0.0039063 0.0013021 0.0026042 0.0026042 0.0052083 0.0013021 0.010417 0.0026042 0.0052083 0.0013021 0 0.0065104 0.0091146 0.0065104 0.0013021 0.013021 0.0065104 0.0052083 0.0026042 0.0013021 0.0052083 0.0013021 0.0039063 0.0052083 0.0052083 0.0013021 0.0026042 0.0052083 0.0013021 0.0013021 0.010417 0.016927 0.0039063 0.0078125 0.0039063 0 0.0013021 0.0013021 0.0052083 0.0065104 0 0 0.0039063 0.0026042 0.0013021 0.0040323 0.0080645 0.0013441 0.0053763 0.0053763 0.0067204 0.0094086 0.0013441 0.0013441 0.010753 0.012097 0.0040323 0.0026882 0
Bình luận1
Tăng thêm bao lì xì

Thỉnh điền bao lì xì chúc phúc ngữ hoặc tiêu đề

Cái

Bao lì xì cái số nhỏ nhất vì 10 cái

Nguyên

Bao lì xì kim ngạch thấp nhất 5 nguyên

Trước mặt ngạch trống3.43Nguyên Đi trước nạp phí >
Cần chi trả:10.00Nguyên
Thành tựu một trăm triệu kỹ thuật người!
Lĩnh sau ngươi sẽ tự động trở thành bác chủ cùng bao lì xì chủ fans Quy tắc
hope_wisdom
Phát ra bao lì xì

Đánh thưởng tác giả

Gà rán thúc lão bạch

Ngươi cổ vũ sẽ là ta sáng tác lớn nhất động lực

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
Quét mã chi trả:¥1
Thu hoạch trung
Quét mã chi trả

Ngài ngạch trống không đủ, thỉnh đổi mới quét mã chi trả hoặcNạp phí

Đánh thưởng tác giả

Thật phóNguyên
Sử dụng ngạch trống chi trả
Điểm đánh một lần nữa thu hoạch
Quét mã chi trả
Tiền bao ngạch trống 0

Để khấu thuyết minh:

1. Ngạch trống là tiền bao nạp phí giả thuyết tiền, dựa theo 1:1 tỉ lệ tiến hành chi trả kim ngạch để khấu.
2. Ngạch trống vô pháp trực tiếp mua sắm download, có thể mua sắm VIP, trả phí chuyên mục cập chương trình học.

Ngạch trống nạp phí