java_baidu_ocr

Java调用百度OCR文字识别API实现图片文字识别软件

这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面

调用了百度ocr文字识别API 识别精度高。

更新日志

新的改变 OcrViewer 2.0 更新于 2019.1.18

我对OcrViewer进行了一些功能拓展与界面美化,除了标准的本地图片识别功能,我增加了如下几点新功能,帮助你更方便使用本工具,进而更好地识别图像中的文字:

全新的界面设计,将会带来全新的使用体验;

在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;

增加了 截图识别 功能,你可以通过截取图片直接直接进行识别;

增加了图片预览功能,更加方便进行图文对比,减少容错;

增加了 清除图片预览 功能,可以清清除览的图片;

增加了 重新识别 等功能,如果不确定可以多次识别提高识别精确率;

下面是功能以及新界面展示

识别出师表.png

截图出师表 .png识别结果

识别代码.png

代码.png识别结果

识腾讯新闻弹窗.png

腾讯新闻弹窗.png识别结果

软件界面

Java源代码:

主窗口类 FileChooserOCR2.java

package baiduOcr;

import java.awt.BorderLayout;

import java.awt.CardLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.util.HashMap;

import javax.imageio.ImageIO;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import org.json.JSONArray;

import org.json.JSONObject;

import com.baidu.aip.ocr.AipOcr;

@SuppressWarnings("serial")

public class FileChooserOCR2 extends JFrame implements ActionListener

{

// 设置APPID/AK/SK

public static final String appId = "15289864";

public static final String apiKey = "j0pj5Y7HVElkLnmn2LEXKeyO";

public static final String secretKey = "FKVbH7EBcGy4DIaqPnXcqE47eACzn2W7";

AipOcr client = new AipOcr(appId, apiKey, secretKey);

JButton open, re0, copy, screen, reset, reocr, b6;

JPanel ocrPanel, pNorth, pSouth, pWest, pEast, pCenter, pCenterLeft, pCenterRight;

JTextArea ocrText;

JLabel previewLabel, printLabel;

ImageIcon defaultPreviewImg;

JScrollPane areaScroll;

String filePath = "./img/preview.jpg";

BufferedImage screenImage;// 用与子窗体给父窗体传值

// 构造方法

public FileChooserOCR2()

{

// 主面板

ocrPanel = new JPanel();

ocrPanel.setLayout(new BorderLayout());

// 各个按钮

open = new JButton("[选择图片>>>文字识别]");

re0 = new JButton("清空");

copy = new JButton("复制");

screen = new JButton("[截图识别]");

reset = new JButton("清除");

reocr = new JButton("重识");

b6 = new JButton("b6");

// 设置各按钮字体

open.setFont(new Font("宋体", Font.BOLD, 18));

screen.setFont(new Font("宋体", Font.BOLD, 18));

copy.setFont(new Font("宋体", Font.BOLD, 18));

re0.setFont(new Font("宋体", Font.BOLD, 18));

reset.setFont(new Font("宋体", Font.BOLD, 18));

reocr.setFont(new Font("宋体", Font.BOLD, 18));

b6.setFont(new Font("宋体", Font.BOLD, 18));

// 图片预览标签以及状态提示标签

defaultPreviewImg = new ImageIcon("./img/preview.jpg");

previewLabel = new JLabel(defaultPreviewImg);

printLabel = new JLabel("输出:");

// 文本域

ocrText = new JTextArea("输出内容。。。");

ocrText.setEditable(true);

ocrText.setVisible(true);

ocrText.setFont(new Font("宋体", Font.BOLD, 18));

// 各方位分面板

pWest = new JPanel(new GridLayout(2, 0));

pEast = new JPanel(new GridLayout(2, 2));

pSouth = new JPanel(new GridLayout(0, 2));

pCenter = new JPanel(new GridLayout(0, 2));

pCenterLeft = new JPanel(new CardLayout());

pCenterRight = new JPanel(new CardLayout());

// 默认预览图片是否伸缩

// previewImg.setImage(previewImg.getImage().getScaledInstance(340,

// 466,Image.SCALE_DEFAULT));

// previewLabel.setIcon(previewImg);

//

// 文本域的滚动条

areaScroll = new JScrollPane(ocrText);

// 设置横向滚动条始终开启

// areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

// 设置垂直滚动条始终开启

// areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

// 设置横向滚动条自动(有需要时)开启

areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

// 设置垂直滚动条自动(有需要时)开启

areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

// 添加监听

open.addActionListener(this);

re0.addActionListener(this);

copy.addActionListener(this);

screen.addActionListener(this);

reset.addActionListener(this);

reocr.addActionListener(this);

// 各组件依次加入相应方位面板

pCenterLeft.add(previewLabel);

// pCenterRight.add(ocrText);

pCenterRight.add(areaScroll);

pWest.add(reocr);

pWest.add(reset);

pSouth.add(screen);

pSouth.add(printLabel);

pCenter.add(pCenterLeft);

pCenter.add(pCenterRight);

pEast.add(copy);

pEast.add(re0);

// 各方位面板加入主面板

ocrPanel.add(open, BorderLayout.NORTH);

ocrPanel.add(pWest, BorderLayout.WEST);

ocrPanel.add(pEast, BorderLayout.EAST);

ocrPanel.add(pCenter, BorderLayout.CENTER);

ocrPanel.add(pSouth, BorderLayout.SOUTH);

ocrPanel.setSize(300, 300);

this.add(ocrPanel);

this.setBounds(400, 200, 900, 600);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

@Override

public void actionPerformed(ActionEvent e)

{

if (e.getSource() == re0)

{

ocrText.setText("已清空内容。。。");

printLabel.setText("输出:已清空内容。。。");

}

if (e.getSource() == copy)

{

String jianqieban = ocrText.getText();

setSysClipboardText(jianqieban);

printLabel.setText("输出:已复制到剪贴板。。。");

}

if (e.getSource() == screen)

{

new ScreenShotTest(this);

// 现已实现为截屏功能, 截屏功能已经封装到一个类文件中,参考的代码

}

if (e.getSource() == reocr)

{

ocrText.setText(imgOcr(filePath));

printLabel.setText("输出:已重新识别。。。");

}

if (e.getSource() == reset)

{

previewLabel.setIcon(defaultPreviewImg);

filePath = "./img/preview.jpg";

printLabel.setText("输出:已清除预览。。。");

}

if (e.getSource() == open)

{

printLabel.setText("输出:选择文件。。。");

System.out.println(e.getSource());

// TODO Auto-generated method stub

JFileChooser jfc = new JFileChooser();

jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

jfc.showDialog(new JLabel(), "选择");

File file = jfc.getSelectedFile();

if (file.isDirectory())

{

System.out.println("(选择目录) $ " + file.getAbsolutePath());

System.out.println("请选择图片。。。");

} else if (file.isFile())

{

filePath = file.getAbsolutePath();

ImageIcon ocrImg = new ImageIcon(filePath);

System.out.println("(选择文件) $ " + filePath);

ocrText.setText("正在识别。。。");

// 缩放后的图片,用到了一个图片缩放算法

ocrImg.setImage(ocrImg.getImage().getScaledInstance(340, 470, Image.SCALE_DEFAULT));

previewLabel.setIcon(ocrImg);

String ocrStr = imgOcr(filePath);

printLabel.setText("输出:正在识别。。。");

ocrText.setText(ocrStr);

printLabel.setText("输出:识别完毕!!!。。。");

}

System.out.println("正在识别>>>" + jfc.getSelectedFile().getName());

}

}

// 复制到剪贴板的方法

public static void setSysClipboardText(String writeMe)

{

Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();

Transferable tText = new StringSelection(writeMe);

clip.setContents(tText, null);

}

// 主方法

public static void main(String[] args)

{

FileChooserOCR2 ocrWin = new FileChooserOCR2();

ocrWin.setVisible(true);

}

/*

* 文字识别方法

*/

public String imgOcr(String imgpath)

{

// 传入可选参数调用接口

HashMap options = new HashMap();

options.put("language_type", "CHN_ENG");

options.put("detect_direction", "true");

options.put("detect_language", "true");

options.put("probability", "true");

// 参数为本地路径

JSONObject res = client.basicGeneral(imgpath, options);

// 解析json-------------

JSONArray wordsResult = (JSONArray) res.get("words_result");

String ocrStr = "\n";

for (Object obj : wordsResult)

{

JSONObject jo = (JSONObject) obj;

ocrStr += jo.getString("words") + "\n";

}

// 解析json-------------

return ocrStr;

// return res.toString(2);

}

/*

* 文字识别方法(方法的重载)

*/

public String imgOcr(byte[] imgInbyte)

{

// 传入可选参数调用接口

HashMap options = new HashMap();

options.put("language_type", "CHN_ENG");

options.put("detect_direction", "true");

options.put("detect_language", "true");

options.put("probability", "true");

// 参数为二进制数组

JSONObject res = client.basicGeneral(imgInbyte, options);

// 解析json-------------

JSONArray wordsResult = (JSONArray) res.get("words_result");

String ocrStr = "\n";

for (Object obj : wordsResult)

{

JSONObject jo = (JSONObject) obj;

ocrStr += jo.getString("words") + "\n";

}

// 解析json-------------

return ocrStr;

// return res.toString(2);

}

}

package baiduOcr;

import java.awt.AWTException;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import java.awt.image.BufferedImage;

import java.awt.image.RescaleOp;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.imageio.ImageIO;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JToolBar;

import javax.swing.JWindow;

import javax.swing.filechooser.FileNameExtensionFilter;

import javax.swing.filechooser.FileSystemView;

public class ScreenShotTest

{

private FileChooserOCR2 superWindow;

public ScreenShotTest(FileChooserOCR2 superWimdow)

{

this.superWindow = superWimdow;

EventQueue.invokeLater(new Runnable() {

@Override

public void run()

{

try

{

new ScreenShotWindow(superWindow);

} catch (AWTException e)

{

e.printStackTrace();

}

}

});

}

}

/*

* 截图窗口

*/

class ScreenShotWindow extends JWindow

{

private int orgx, orgy, endx, endy;

private BufferedImage image = null;

private BufferedImage tempImage = null;

private BufferedImage saveImage = null;

private ToolsWindow tools = null;

private FileChooserOCR2 superWin;

public ScreenShotWindow(FileChooserOCR2 superWindow) throws AWTException

{

this.superWin = superWindow;

// 获取屏幕尺寸

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

this.setBounds(0, 0, d.width, d.height);

// 截取屏幕

Robot robot = new Robot();

image = robot.createScreenCapture(new Rectangle(0, 0, d.width, d.height));

this.addMouseListener(new MouseAdapter() {

@Override

public void mousePressed(MouseEvent e)

{

// 鼠标松开时记录结束点坐标,并隐藏操作窗口

orgx = e.getX();

orgy = e.getY();

if (tools != null)

{

tools.setVisible(false);

}

}

@Override

public void mouseReleased(MouseEvent e)

{

// 鼠标松开时,显示操作窗口

if (tools == null)

{

tools = new ToolsWindow(ScreenShotWindow.this, e.getX(), e.getY());

} else

{

tools.setLocation(e.getX(), e.getY());

}

tools.setVisible(true);

tools.toFront();

}

});

this.addMouseMotionListener(new MouseMotionAdapter() {

@Override

public void mouseDragged(MouseEvent e)

{

// 鼠标拖动时,记录坐标并重绘窗口

endx = e.getX();

endy = e.getY();

// 临时图像,用于缓冲屏幕区域放置屏幕闪烁

Image tempImage2 = createImage(ScreenShotWindow.this.getWidth(), ScreenShotWindow.this.getHeight());

Graphics g = tempImage2.getGraphics();

g.drawImage(tempImage, 0, 0, null);

int x = Math.min(orgx, endx);

int y = Math.min(orgy, endy);

int width = Math.abs(endx - orgx) + 1;

int height = Math.abs(endy - orgy) + 1;

// 加上1防止width或height0

g.setColor(Color.BLUE);

g.drawRect(x - 1, y - 1, width + 1, height + 1);

// 减1加1都了防止图片矩形框覆盖掉

saveImage = image.getSubimage(x, y, width, height);

g.drawImage(saveImage, x, y, null);

ScreenShotWindow.this.getGraphics().drawImage(tempImage2, 0, 0, ScreenShotWindow.this);

}

});

this.setVisible(true);

}

@Override

public void paint(Graphics g)

{

RescaleOp ro = new RescaleOp(0.8f, 0, null);

tempImage = ro.filter(image, null);

g.drawImage(tempImage, 0, 0, this);

}

// 保存图像到文件

public void saveImage() throws IOException

{

// 先隐藏窗口后台执行,显得程序执行很快

this.setVisible(false);

tools.setVisible(false);

JFileChooser jfc = new JFileChooser();

jfc.setDialogTitle("保存");

// 文件过滤器,用户过滤可选择文件

FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG", "jpg");

jfc.setFileFilter(filter);

// 初始化一个默认文件(此文件会生成到桌面上)

SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");

String fileName = sdf.format(new Date());

File filePath = FileSystemView.getFileSystemView().getHomeDirectory();

File defaultFile = new File(filePath + File.separator + fileName + ".jpg");

jfc.setSelectedFile(defaultFile);

int flag = jfc.showSaveDialog(this);

if (flag == JFileChooser.APPROVE_OPTION)

{

File file = jfc.getSelectedFile();

String path = file.getPath();

// 检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀

if (!(path.endsWith(".jpg") || path.endsWith(".JPG")))

{

path += ".jpg";

}

// 写入文件

superWin.printLabel.setText("输出:已保存截图!!!");

ImageIO.write(saveImage, "jpg", new File(path));

dispose();

}

}

// 返回截取的图片

public void okImage()

{

this.setVisible(false);

tools.setVisible(false);

superWin.printLabel.setText("输出:识别截图成功!!!");

ByteArrayOutputStream baos = null;

try

{

baos = new ByteArrayOutputStream();

ImageIO.write(saveImage, "jpg", baos);

byte[] imageInByte = baos.toByteArray();// 使用toByteArray()方法转换成字节数组

superWin.ocrText.setText(superWin.imgOcr(imageInByte));

baos.flush();// 会产生IOException异常

} catch (IOException e1)

{

e1.printStackTrace();

} finally

{

try

{

if (baos != null)

{

baos.close();

}

} catch (Exception ex)

{

ex.printStackTrace();

}

}

dispose();

}

/*

* 文字识别方法(方法的重载) 用父窗口类的

*/

/*

* 文字识别方法

*/

}

/*

* 操作窗口

*/

class ToolsWindow extends JWindow implements ActionListener

{

private ScreenShotWindow parent;

JButton saveButton, closeButton, okButton;

public ToolsWindow(ScreenShotWindow parent, int x, int y)

{

this.parent = parent;

this.setLayout(new BorderLayout());

JToolBar toolBar = new JToolBar("Java 截图");

// 保存按钮

saveButton = new JButton("◰");

// 关闭按钮

closeButton = new JButton("✘");

// 选定按钮

okButton = new JButton("✔");

saveButton.addActionListener(this);

closeButton.addActionListener(this);

okButton.addActionListener(this);

toolBar.add(saveButton);

toolBar.add(closeButton);

toolBar.add(okButton);

this.add(toolBar, BorderLayout.NORTH);

this.setLocation(x, y);

this.pack();

this.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e)

{

// TODO Auto-generated method stub

if (e.getSource() == saveButton)

{

try

{

parent.saveImage();

dispose();

} catch (IOException e1)

{

e1.printStackTrace();

}

}

if (e.getSource() == closeButton)

{

parent.dispose();

dispose();

// System.exit(0);

}

if (e.getSource() == okButton)

{

// 返回选定的图片

parent.okImage();

dispose();

}

}

}

↑↑↑↑↑↑↑↑↑↑↑↑以上为2019.1.18日OcrViewer2.0第二代↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

↓↓↓↓↓↓↓↓↓↓↓↓以下为2019.1.12日OcrViewer1.0第一代↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

打包生成了jar可执行程序

完整项目GitHub地址 新人有帮助有用的话请给个star谢谢了!

识别图一

图一识别结果

识别图二

图二识别结果

识别图三

图三识别结果

软件界面

Java源代码:

package baiduOcr;

import java.awt.BorderLayout;

import java.awt.Font;

import java.awt.Toolkit;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.util.HashMap;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import org.json.JSONArray;

import org.json.JSONObject;

import com.baidu.aip.ocr.AipOcr;

@SuppressWarnings("serial")

public class FileChooserOCR extends JFrame implements ActionListener

{

// 设置APPID/AK/SK

public static final String appId = "15289864";

public static final String apiKey = "j0pj5Y7HVElkLnmn2LEXKeyO";

public static final String secretKey = "FKVbH7EBcGy4DIaqPnXcqE47eACzn2W7";

AipOcr client = new AipOcr(appId, apiKey, secretKey);

JButton open, b1, b2, b3;

JPanel ocrPanel;

JTextArea ocrText;

JScrollPane areaScroll;

// 构造方法

public FileChooserOCR()

{

ocrPanel = new JPanel();

ocrPanel.setLayout(new BorderLayout());

open = new JButton("选择图片>>>文字识别");

b1 = new JButton("清空");

b2 = new JButton("复制");

b3 = new JButton("配置");

open.setFont(new Font("宋体", Font.BOLD, 18));

b3.setFont(new Font("宋体", Font.BOLD, 18));

b2.setFont(new Font("宋体", Font.BOLD, 18));

b1.setFont(new Font("宋体", Font.BOLD, 18));

//文本域的滚动条

//areaScroll = new JScrollPane(ocrText);

//areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

//areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

//添加监听

open.addActionListener(this);

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

ocrText = new JTextArea("输出内容。。。");

ocrText.setEditable(true);

ocrText.setVisible(true);

ocrText.setFont(new Font("宋体", Font.BOLD, 18));

ocrPanel.add(open, BorderLayout.NORTH);

ocrPanel.add(b1, BorderLayout.EAST);

ocrPanel.add(b2, BorderLayout.WEST);

ocrPanel.add(b3, BorderLayout.SOUTH);

ocrPanel.add(ocrText, BorderLayout.CENTER);

//ocrPanel.add(areaScroll);

ocrPanel.setSize(300, 300);

this.add(ocrPanel);

this.setBounds(400, 200, 900, 600);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

@Override

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==b1)

{

ocrText.setText("已清空内容。。。");

}

if(e.getSource()==b2)

{

String jianqieban = ocrText.getText();

setSysClipboardText(jianqieban);

}

if (e.getSource()==b3)

{

//日后实现

}

if(e.getSource()==open)

{

System.out.println(e.getSource());

// TODO Auto-generated method stub

JFileChooser jfc = new JFileChooser();

jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

jfc.showDialog(new JLabel(), "选择");

File file = jfc.getSelectedFile();

if (file.isDirectory())

{

System.out.println("(选择目录) $ " + file.getAbsolutePath());

System.out.println("请选择图片。。。");

}

else if (file.isFile())

{

System.out.println("(选择文件) $ " + file.getAbsolutePath());

ocrText.setText("正在识别。。。");

String ocrStr = this.imgOcr(file.getAbsolutePath());

ocrText.setText(ocrStr);

}

System.out.println("正在识别>>>"+jfc.getSelectedFile().getName());

}

}

//复制到剪贴板

public static void setSysClipboardText(String writeMe) {

Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();

Transferable tText = new StringSelection(writeMe);

clip.setContents(tText, null);

}

// 主方法

public static void main(String[] args)

{

FileChooserOCR ocrWin = new FileChooserOCR();

ocrWin.setVisible(true);

}

/*

* 文字识别方法

*/

public String imgOcr(String imgpath)

{

// 传入可选参数调用接口

HashMap options = new HashMap();

options.put("language_type", "CHN_ENG");

options.put("detect_direction", "true");

options.put("detect_language", "true");

options.put("probability", "true");

// 参数为本地路径

JSONObject res = client.basicGeneral(imgpath, options);

//解析json-------------

JSONArray wordsResult = (JSONArray)res.get("words_result");

String ocrStr = "\n";

for(Object obj : wordsResult)

{

JSONObject jo = (JSONObject)obj;

ocrStr += jo.getString("words") + "\n";

}

//解析json-------------

return ocrStr;

// return res.toString(2);

// 参数为二进制数组

// byte[] file = readFile("test.jpg");

// res = client.basicGeneral(file, options);

// System.out.println(res.toString(2));

// 通用文字识别, 图片参数为远程url图片

// JSONObject res = client.basicGeneralUrl(url, options);

// System.out.println(res.toString(2));

}

}

java ocr文字识别软件_Java文字识别软件-调用百度ocr实现文字识别相关推荐

  1. java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 项目源代码在文末,放到了GitHub上 - https://github.com/Ymy214/java_bai ...

  2. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  3. java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件

    Java调用百度OCR文字识别API实现图片文字识别软件 原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏 展开 java_baidu_ocr Java调用百度 ...

  4. Java调用百度OCR文字识别的接口

    调用百度OCR文字识别的接口,来自于百度官网,亲测可以使用 跳转链接 FileUtil的下载链接 Base64Util下载链接 HttpUtil下载链接 GsonUtils下载链接 Accurate. ...

  5. java实现自动识别验证码并自动填写提交(调用百度通用文字识别OCR接口+大图找小图之图像识别算法+模拟鼠标键盘动作)

    一.使用的技术: 1.调用百度AI通用文字识别OCR接口 2.图像识别算法 二.实现方案与步骤: 1.得到验证码的图片的坐标:先将验证码截图,然后再对整个电脑屏幕截图,通过大图找小图的方法,计算出小图 ...

  6. python调用百度接口实现ocr识别_Python 3调用百度OCR API实现剪贴板文字识别

    本程序调用百度OCR API对剪贴板的图片文字识别,配合CaptureScreen软件,可快速识别文字. #!python3 import urllib.request, urllib.parse i ...

  7. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  8. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  9. 基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪

    基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪 1.application.yml 2.Controller层接口 3.相关工具类 3.1 DateUtils ...

最新文章

  1. java遍历给定目录,树形结构输出所有文件,包括子目录中的文件
  2. jquery总结01-基本概念和选择器
  3. tf.control_dependencies()控制计算流图
  4. 28.构造函数中,成员变量一定要通过初始化列表来初始化的?
  5. 马斯克推崇的第一性原理,究竟有多重要?
  6. php 用户授权访问控制,用户权限访问控制功能
  7. java基础知识点(1)——计算机的基础-计算机语言
  8. 【Kafka】Kafka安装部署
  9. python从入门到精通pdf清华大学出版社-python从入门到精通 清华大学出版社
  10. 硬件安全模块(HSM)
  11. Ubuntu硬盘的分区、格式化、挂载
  12. ab 与 abs 测试详解
  13. 语音机器人在人工智能领域的发展
  14. hive修改分区信息
  15. 三、Android网络开发
  16. Mybatis的模糊查询写法
  17. Ubuntu出现device not managed 如何解决?
  18. win服务器性能测试,windows服务器性能测试
  19. BigDecimal 金额转换
  20. VOR系统收发信号模拟,完成测向功能仿真

热门文章

  1. 视频教程-JAVAEE真实课堂系列之XML全讲-云计算基础架构
  2. 查看已结束的中国大学MOOC课程
  3. 《C Primer Plus》第六章---C控制语句:循环(while for do while 嵌套循环 真值 逗号运算符 复习题编程题)
  4. 服务器电源ic芯片,AC-DC适配器电源IC芯片方案选型表
  5. Idea-02:Three Needs Theory(三需求理论)
  6. 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信
  7. 基于pytorch的MNIST数据集的四层CNN,测试准确率99.77%
  8. 使用Latex语法快速的编辑漂亮的公式
  9. WBO第一届世界区块链高峰论坛在香港国际亚洲博览馆正隆重举行
  10. VM ware 启动时坏掉了的解决方法:Runtime error opening,big_linux.vbox' for reading: -102 (File not found.).