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

原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏

展开

java_baidu_ocr

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

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

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

完整项目放在GitHub:https://github.com/Ymy214/java_baidu_ocr

更新日志

新的改变 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);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

截图窗口类 ScreenShotTest.java(参考自:https://www.jb51.net/article/48968.htm)

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();

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

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

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

打包生成了jar可执行程序

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

https://github.com/Ymy214/java_baidu_ocr

识别图一

图一识别结果

识别图二

图二识别结果

识别图三

图三识别结果

软件界面

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));

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

完整项目放在GitHub:https://github.com/Ymy214/java_baidu_ocr

————————————————

版权声明:本文为CSDN博主「isinple」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/isinple/article/details/85924261

java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件相关推荐

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

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

  2. 如何调用百度文字识别API提取图片文字并保存-保姆级教程

    百度API 百度API是百度提供的一套开放的应用程序接口,它允许开发者在百度的基础上构建应用程序,并通过百度的各种渠道进行推广和营销.百度API分为移动.Web.智能客服.数据.娱乐.传统IT六大类, ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. virtual方法(虚方法)与abstract(抽象方法)的区别
  2. 简介struct cmsghdr结构
  3. RocketMQ API使用简介、拉取机制
  4. 利用云功能和API监视Google表格中的Cloud Dataprep作业状态
  5. 企业集成模式_企业集成模式简介
  6. ajax发送数据时的contentType
  7. 【飞鸽传书3.0】飞鸽传书3.0关键字布局
  8. php音频格式 操作,php操作视频音频类-ffmpeg-php
  9. 安卓fragment笔记
  10. 游戏数据分析指标定义 | 通用
  11. 计算机毕业设计ssm飞机售票管理系统63z52系统+程序+源码+lw+远程部署
  12. 黑鲨重装计算机安装无法继续,黑鲨装机大师一键重装系统失败怎么办
  13. AES256加解密与异常处理
  14. 解决mac 下蓝牙卡顿问题
  15. Java8的stream处理List集合的相同部分(交集)、去重
  16. 详解Ubuntu的网络配置
  17. 电脑怎么用计算机打开指令,快速打开电脑上的计算器
  18. NAS入门之——Mac系统My Cloud EX2 Ultra设置时间机器
  19. neovim符号自动补全auto-pairs
  20. C语言进阶剖析 13 接续符和转义符

热门文章

  1. 【天勤|数据结构】树
  2. 复合二进制文档(Compound Document File)解析
  3. scanf和putchar
  4. 圆角矩形填充原理图及口诀
  5. MB1C MIGO入库时【不可能为条目A999 GBB CN01 BSA 7920确立帐户】解决方案
  6. emWin专题——emWin简介及模拟器的使用
  7. 【转】胡如珊——人生最重要的事情都是简单的
  8. 论文阅读笔记--ExpandNet: High Dynamic Range Expansion from Low Dynamic Range Content
  9. 三维图形编程OpenGL的glut文件配置(vs2022)
  10. php和Java的简单对比