tess4j3.2.1识别中英文

tess4j3.2.1识别中英文1.测试代码publicclassTesseractExample{ publicstaticvoidmain(String[]args)throwsException{ //1.本地 //FileimageFile=newFile("C:\\wangl\\eurotext.tif"); //InputStreamis=…

大家好,又见面了,我是你们的朋友全栈君。

1. 测试代码

public class TesseractExample {
	 public static void main(String[] args) throws Exception {
	    //1.本地
	    //File imageFile = new File("C:\\wangl\\eurotext.tif");
		//InputStream is = new FileInputStream(imageFile);; 
		//2.url http
	    //InputStream is = downLoadFromUrl("http://s1.sinaimg.cn/mw690/003bsgbmgy6R6ekxkl2e0"); 
		//3.url https
		InputStream is = downLoadFromUrl("https://login.10333.com/dotoyo//captchacode");
		    
		BufferedImage bi = ImageIO.read(is);
	    ITesseract instance = new Tesseract();  // JNA Interface Mapping
        //设置datapath
	    instance.setDatapath("C:\\wangl\\soft\\tess4j\\tessdata");  
        //设置语言包
        instance.setLanguage("eng+chi_sim");
	    try {
	        String result = instance.doOCR(bi);
	        System.out.println(result);
	    } catch (TesseractException e) {
	        System.err.println(e.getMessage());
	    }
	    if(is != null){
	       is.close();
	    }
	 }
	 
	 public static InputStream downLoadFromUrl(String urlStr) throws Exception{
             //指定证书文件
		System.setProperty("javax.net.ssl.trustStore","C:\\wangl\\soft\\Java\\jdk1.7.0_79\\jre\\lib\\security\\jssecacerts");
	        URL url = new URL(urlStr);  
	        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
	        //信任所有的https证书
	        trustAllHttpsCertificates();
	        HttpsURLConnection.setDefaultHostnameVerifier(hv);
	        //设置超时间为3秒
	        conn.setConnectTimeout(3*1000);
	        //防止屏蔽程序抓取而返回403错误
	        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
	        //得到输入流
	        InputStream inputStream = conn.getInputStream();  
	        return inputStream;
	}
	 
	public static HostnameVerifier hv = new HostnameVerifier() {
	        public boolean verify(String urlHostName, SSLSession session) {
	            System.out.println("Warning: URL Host: " + urlHostName + " vs. "
	                               + session.getPeerHost());
	            return true;
	        }
	};
		
	private static void trustAllHttpsCertificates() throws Exception {
		javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
		javax.net.ssl.TrustManager tm = new miTM();
		trustAllCerts[0] = tm;
		javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
				.getInstance("SSL");
		sc.init(null, trustAllCerts, null);
		javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
				.getSocketFactory());
	}

	static class miTM implements javax.net.ssl.TrustManager,
			javax.net.ssl.X509TrustManager {
		public java.security.cert.X509Certificate[] getAcceptedIssuers() {
			return null;
		}

		public boolean isServerTrusted(
				java.security.cert.X509Certificate[] certs) {
			return true;
		}

		public boolean isClientTrusted(
				java.security.cert.X509Certificate[] certs) {
			return true;
		}

		public void checkServerTrusted(
				java.security.cert.X509Certificate[] certs, String authType)
				throws java.security.cert.CertificateException {
			return;
		}

		public void checkClientTrusted(
				java.security.cert.X509Certificate[] certs, String authType)
				throws java.security.cert.CertificateException {
			return;
		}
	}
}

 

2. 设置datapath,设置语言包中英文

3. 注意如果https证书不被信任,那么需要导出证书(填写host port 路径,运行InstallCert

导出证书)

   

public class InstallCert {

	public static void main(String[] args) throws Exception {
//		
//		int port;
//		char[] passphrase;
//		if ((args.length == 1) || (args.length == 2)) {
//			String[] c = args[0].split(":");
//			host = c[0];
//			port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
//			String p = (args.length == 1) ? "changeit" : args[1];
//			passphrase = p.toCharArray();
//		} else {
//			System.out
//					.println("Usage: java InstallCert <host>[:port] [passphrase]");
//			return;
//		}
		String host = "14.17.69.168";
		int port = 443;
		String p =  "changeit" ;
		char[] passphrase = p.toCharArray();
		

		File file = new File("jssecacerts");
		if (file.isFile() == false) {
			char SEP = File.separatorChar;
			File dir = new File(System.getProperty("java.home") + SEP + "lib"
					+ SEP + "security");
			file = new File(dir, "jssecacerts");
			if (file.isFile() == false) {
				file = new File(dir, "cacerts");
			}
		}
		System.out.println("Loading KeyStore " + file + "...");
		InputStream in = new FileInputStream(file);
		KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
		ks.load(in, passphrase);
		in.close();

		SSLContext context = SSLContext.getInstance("TLS");
		TrustManagerFactory tmf = TrustManagerFactory
				.getInstance(TrustManagerFactory.getDefaultAlgorithm());
		tmf.init(ks);
		X509TrustManager defaultTrustManager = (X509TrustManager) tmf
				.getTrustManagers()[0];
		SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
		context.init(null, new TrustManager[] { tm }, null);
		SSLSocketFactory factory = context.getSocketFactory();

		System.out
				.println("Opening connection to " + host + ":" + port + "...");
		SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
		socket.setSoTimeout(10000);
		try {
			System.out.println("Starting SSL handshake...");
			socket.startHandshake();
			socket.close();
			System.out.println();
			System.out.println("No errors, certificate is already trusted");
		} catch (SSLException e) {
			System.out.println();
			e.printStackTrace(System.out);
		}

		X509Certificate[] chain = tm.chain;
		if (chain == null) {
			System.out.println("Could not obtain server certificate chain");
			return;
		}
 
		System.out.println();
		System.out.println("Server sent " + chain.length + " certificate(s):");
		System.out.println();
		MessageDigest sha1 = MessageDigest.getInstance("SHA1");
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		for (int i = 0; i < chain.length; i++) {
			X509Certificate cert = chain[i];
			System.out.println(" " + (i + 1) + " Subject "
					+ cert.getSubjectDN());
			System.out.println("   Issuer  " + cert.getIssuerDN());
			sha1.update(cert.getEncoded());
			System.out.println("   sha1    " + toHexString(sha1.digest()));
			md5.update(cert.getEncoded());
			System.out.println("   md5     " + toHexString(md5.digest()));
			System.out.println();
		}

		System.out
				.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
		String line = "1";
		int k;
		try {
			k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
		} catch (NumberFormatException e) {
			System.out.println("KeyStore not changed");
			return;
		}

		X509Certificate cert = chain[k];
		String alias = host + "-" + (k + 1);
		ks.setCertificateEntry(alias, cert);

		OutputStream out = new FileOutputStream("c://wangl//https//jssecacerts");
		ks.store(out, passphrase);
		out.close();

		System.out.println();
		System.out.println(cert);
		System.out.println();
		System.out
				.println("Added certificate to keystore 'jssecacerts' using alias '"
						+ alias + "'");
	}

	private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

	private static String toHexString(byte[] bytes) {
		StringBuilder sb = new StringBuilder(bytes.length * 3);
		for (int b : bytes) {
			b &= 0xff; 
			sb.append(HEXDIGITS[b >> 4]);
			sb.append(HEXDIGITS[b & 15]);
			sb.append(' ');
		}
		return sb.toString();
	}

	private static class SavingTrustManager implements X509TrustManager {

		private final X509TrustManager tm;
		private X509Certificate[] chain;

		SavingTrustManager(X509TrustManager tm) {
			this.tm = tm;
		}

		public X509Certificate[] getAcceptedIssuers() {
			throw new UnsupportedOperationException();
		}

		public void checkClientTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
			throw new UnsupportedOperationException();
		}

		public void checkServerTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
			this.chain = chain;
			tm.checkServerTrusted(chain, authType);
		}
	}

}

4.https需要在代码1中指定证书文件.

5.图片信息为: 汉字验证码–demo分

  最终结果显示: 汉字验证码汴demo分享

 

  OK,识别率还可以,但存在提升的空间!

   

 6.如果追求高识别率,可以考虑付费的国外泰比和国内的汉王.

    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134715.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Deep Boltzmann Machines

    Deep Boltzmann Machines转载自:http://blog.csdn.net/win_in_action/article/details/25333671 http://blog.csdn.net/zouxy09/article/details/8775518深度神经网络(Deepneuralnetwork)   深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构

    2022年7月13日
    14
  • vim编辑器,可以实现保存退出()_vim进入编辑模式如何保存并退出

    vim编辑器,可以实现保存退出()_vim进入编辑模式如何保存并退出目录1.Vim模式2.在Vim/Vi中打开文件3.在Vim/Vi中保存文件4.保存文件并退出Vim/Vi5.退出Vim/Vi而不保存文件1.Vim模式启动Vim编辑器时,您处于正常模式。在这种模式下,您可以使用vim命令并浏览文件。要输入文字,您需要按i键进入插入模式。使用此模式,您可以像在常规文本编辑器中一样插入和删除字符。要从其他任何模式返回正常模式,只需按Esc键。2.在Vim/Vi中打开文件要使用Vim打开文件,请键入vim,然后输入要编辑或创建的文件的.

    2022年8月24日
    9
  • 模糊数学基础_模糊数学及其应用

    模糊数学基础_模糊数学及其应用模糊数学基础文章目录模糊数学基础1.前言2.区分随机性和模糊性3.模糊数学的基本概念1.模糊集和隶属函数2.模糊集的表示3.确定隶属函数的方法4.与传统集合论的区分4.模糊数学的基本运算1.模糊集的运算2.模糊关系与运算1.关系与模糊关系2.模糊关系矩阵的运算3.python程序求解法1.前言1965年美国著名控制论专家发表了FuzzySets从而开创了模糊数学的基本概念用“隶属度”和“隶属函数”来描述差异的中间过渡,处理和刻画模糊现象.处理现实现象的数学模型可以分为三

    2025年8月4日
    4
  • Java中Scanner的nextInt(),next(),nextLine()方法总结[通俗易懂]

    Java中Scanner的nextInt(),next(),nextLine()方法总结[通俗易懂]前言:借别人的例子做个总结。原文出处:http://www.cnblogs.com/gold-worker/archive/2013/04/10/3013063.html代码一packagecn.dx;importjava.util.Scanner;publicclassScannerTest{publicstaticvoidmain(String[]

    2022年5月2日
    55
  • js正则 手机号_正则表达式 手机号

    js正则 手机号_正则表达式 手机号RegExp对象正则表达式是描述字符模式的对象。正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。//匹配手机号//varres=/^[1][3,4,5,6.7,8,9][0-9]{9}$///letnum=18045216903//console.log(res.test(num))//匹配身份证号码//varres=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)///varn=’5203

    2022年9月14日
    4
  • mipiLCD屏幕参数_mipi接口液晶屏

    mipiLCD屏幕参数_mipi接口液晶屏主屏通过lt8911exb将mipi信号转换成EDP信号输出,调试从大的方向上看,主要是两方面,一个是bootloader阶段的的显示,一个是kernel阶段的现实,lt8911exb的初始化主要在bootloader阶段调试简介:本次调试lt8911exb的I2C接到SDM450的I2C3接口bootloader阶段由于lt8911exb使用的是I2C接口,所以在bootloader阶段需要实现该I2C接口的初始化工作,然后去初始化lt8911exb。然后再按照通用的方式去配置屏.

    2022年10月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号