① java如何提高百度文字識別的准確度
java文字識別程序的關鍵是尋找一個可以調用的OCR引擎。tesseract-ocr就是一個這樣的OCR引擎,在1985年到1995年由HP實驗室開發,現在在Google。tesseract-ocr 3.0發布,支持中文。不過tesseract-ocr 3.0不是圖形化界面的客戶端,別人寫的FreeOCR圖形化客戶端還不支持導入新的 3.0 traineddata。但這標志著,現在有自由的中文OCR軟體了。
java中使用tesseract-ocr3.01的步驟如下:
1.下載安裝tesseract-ocr-setup-3.01-1.exe(3.0以上版本才增加了中文識別)
2.在安裝向導中可以選擇需要下載的語言包。
3.到網上搜索下載java圖形處理所需的2個包:jai_imageio-1.1-alpha.jar,swingx-1.6.1.jar
4.java程序清單:
文字識別私有化部署方案
可部署至「本地伺服器」的文字識別服務,支持主流 CPU/GPU 環境及國產化系統部署,通用場景、卡證、票據、iOCR 等各類 OCR 模型及自定義平台均可提供容器化部署包,在專有網路環境下一鍵部署應用,保障數據私密性。同時,可提供通用型一體機或國產化一體機,軟硬一體交付,開箱即用,統一維保
快捷部署
容器化打包,支持本地物理機、私有雲等多種部署方式,提供一鍵部署工具和常用運維工具,快速接入、高效運維
數據安全
專有網路環境下本地化部署,數據無需公網上傳,實現業務網路公私分離,保障企業核心生產數據的私密性要求
適配廣泛
CPU 及 GPU 環境均可部署,主流 GPU 顯卡類型均已適配,並可支持國產化系統部署
授權靈活
根據QPS和使用期限進行授權,可自由選擇不同QPS配置,靈活適應不同場景、不同業務的並發量需求
成為開發者
三步完成賬號的基本注冊與認證:
STEP1:點擊網路AI開放平台導航右側的控制台,選擇需要使用的AI服務項。若為未登錄狀態,將跳轉至登錄界面,請您使用網路賬號登錄。如還未持有網路賬戶,可以點擊此處注冊網路賬戶。
STEP2:首次使用,登錄後將會進入開發者認證頁面,請填寫相關信息完成開發者認證。註:(如您之前已經是網路雲用戶或網路開發者中心用戶,此步可略過)。
STEP3:通過控制台左側導航,選擇產品服務-人工智慧,進入具體AI服務項的控制面板(如文字識別、人臉識別),進行相關業務操作。
希望能幫到你,謝謝!
② java怎麼實現驗證碼識別
圖片驗證碼是什麼
圖片驗證碼,這個大家應該都見過。最普遍的圖片驗證碼就是一張圖片上面有4-6個歪歪扭扭的數字字母,圖片還有點看不清楚,但是基本可以肉眼識別出上面的數字字母。那為什麼要有這個東東呢?
其實驗證碼的出現為了區分人與機器。對於歪歪妞妞還有點看不清的數字字母圖片,由於人腦的特殊構造,是可以完全無障礙識別的,但是想讓奇跡識別出這些字母數字,就會出現識別錯誤。那為什麼要區別人與機器呢?假如一個一個系統沒有驗證碼,我知道了你的用戶名,並且知道你的登錄密碼是8位的數字,那我完全可以寫個腳本程序窮舉出所有的8位數組合,挨個去嘗試登錄,這個過程對於人來說可能耗時耗力,但是對於程序來說,so easy。所以驗證碼的出現就會阻止程序進行這樣的窮舉登錄。
隨著技術的發展,現在很多的驗證碼系統都可以通過圖像處理、機器學習深度學習等方式進行攻破,圖片驗證碼已經不再安全,即使是非常有名的12306驗證碼,也已經被利用深度學習達到了很高的識別精度。所以也出現了手機驗證碼、拖動滑塊圖片到指定位置的驗證碼等各種驗證碼。
③ 如何用java實現復雜驗證碼識別
驗證碼有圖片驗證碼和簡訊驗證碼,圖片驗證碼。
圖片驗證碼版:http://www.jb51.net/article/42157.htm
短息驗證碼需要調用介面,得花錢。權http://www.yuntongxun.com/activity/sms/anxin.html?ly=-sem-p&qd=cpc&cp=sms&xl=beijingdxcs&kw=10286709
④ java怎麼識別一個字元串中有漢字
可以使用正則表達式+中文字元編碼區間驗證一個字元串中是否包含漢字
代碼如下:
public static void main(String[] args) {
int count = 0;
String regEx = "[\\u4e00-\\u9fa5]";
//System.out.println(regEx);
String str = "中文fdas ";
//System.out.println(str);
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
for (int i = 0; i <= m.groupCount(); i++) {
count = count + 1;
}
}
System.out.println("共有 " + count + "個 ");
}
⑤ Java 如何判斷驗證碼是否正確
可以使用 AJAX 遞交、判斷的
⑥ JAVA識別圖片驗證碼
package com.he;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class CodeFact
extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//設置頁面不緩存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 在內存中創建圖象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 獲取圖形上下文
Graphics g = image.getGraphics();
//生成隨機類
Random random = new Random();
// 設定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//設定字體
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//畫邊框
g.setColor(new Color(33,66,99));
g.drawRect(0,0,width-1,height-1);
// 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
// 取隨機產生的認證碼(4位數字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 將認證碼顯示到圖象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110),
20 + random.nextInt(110))); //調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
// 將認證碼存入SESSION
HttpSession session = request.getSession();
session.setAttribute("rand", sRand);
// 圖象生效
g.dispose();
// 輸出圖象到頁面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
//給定范圍獲得隨機顏色
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
你試試!!
⑦ Java如何實現驗證碼驗證功能
Java如何實現驗證碼驗證功能呢?日常生活中,驗證碼隨處可見,他可以在一定程度上保護賬號安全,那麼他是怎麼實現的呢?
Java實現驗證碼驗證功能其實非常簡單:用到了一個Graphics類在畫板上繪制字母,隨機選取一定數量的字母隨機生成,然後在畫板上隨機生成幾條干擾線。
首先,寫一個驗證碼生成幫助類,用來繪制隨機字母:
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Random;
importjavax.imageio.ImageIO;
publicfinalclassGraphicHelper{
/**
*以字元串形式返回生成的驗證碼,同時輸出一個圖片
*
*@paramwidth
*圖片的寬度
*@paramheight
*圖片的高度
*@paramimgType
*圖片的類型
*@paramoutput
*圖片的輸出流(圖片將輸出到這個流中)
*@return返回所生成的驗證碼(字元串)
*/
publicstaticStringcreate(finalintwidth,finalintheight,finalStringimgType,OutputStreamoutput){
StringBuffersb=newStringBuffer();
Randomrandom=newRandom();
BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphicsgraphic=image.getGraphics();
graphic.setColor(Color.getColor("F8F8F8"));
graphic.fillRect(0,0,width,height);
Color[]colors=newColor[]{Color.BLUE,Color.GRAY,Color.GREEN,Color.RED,Color.BLACK,Color.ORANGE,
Color.CYAN};
//在"畫板"上生成干擾線條(50是線條個數)
for(inti=0;i<50;i++){
graphic.setColor(colors[random.nextInt(colors.length)]);
finalintx=random.nextInt(width);
finalinty=random.nextInt(height);
finalintw=random.nextInt(20);
finalinth=random.nextInt(20);
finalintsignA=random.nextBoolean()?1:-1;
finalintsignB=random.nextBoolean()?1:-1;
graphic.drawLine(x,y,x+w*signA,y+h*signB);
}
//在"畫板"上繪制字母
graphic.setFont(newFont("ComicSansMS",Font.BOLD,30));
for(inti=0;i<6;i++){
finalinttemp=random.nextInt(26)+97;
Strings=String.valueOf((char)temp);
sb.append(s);
graphic.setColor(colors[random.nextInt(colors.length)]);
graphic.drawString(s,i*(width/6),height-(height/3));
}
graphic.dispose();
try{
ImageIO.write(image,imgType,output);
}catch(IOExceptione){
e.printStackTrace();
}
returnsb.toString();
}
}
接著,創建一個servlet,用來固定圖片大小,以及處理驗證碼的使用場景,以及捕獲頁面生成的驗證碼(捕獲到的二維碼與用戶輸入的驗證碼一致才能通過)。
importjava.io.OutputStream;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
@WebServlet(urlPatterns="/verify/regist.do")
{
=3398560501558431737L;
@Override
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//獲得當前請求對應的會話對象
HttpSessionsession=request.getSession();
//從請求中獲得URI(統一資源標識符)
Stringuri=request.getRequestURI();
System.out.println("hello:"+uri);
finalintwidth=180;//圖片寬度
finalintheight=40;//圖片高度
finalStringimgType="jpeg";//指定圖片格式(不是指MIME類型)
finalOutputStreamoutput=response.getOutputStream();//獲得可以向客戶端返回圖片的輸出流
//(位元組流)
//創建驗證碼圖片並返回圖片上的字元串
Stringcode=GraphicHelper.create(width,height,imgType,output);
System.out.println("驗證碼內容:"+code);
//建立uri和相應的驗證碼的關聯(存儲到當前會話對象的屬性中)
session.setAttribute(uri,code);
System.out.println(session.getAttribute(uri));
}
}
接著寫一個HTML注冊頁面用來檢驗一下:
<html>
<head>
<metacharset="UTF-8">
<title>注冊</title>
<linkrel="stylesheet"href="styles/general.css">
<linkrel="stylesheet"href="styles/cell.css">
<linkrel="stylesheet"href="styles/form.css">
<scripttype="text/javascript"src="js/ref.js"></script>
<styletype="text/css">
.logo-container{
margin-top:50px;
}
.logo-containerimg{
width:100px;
}
.message-container{
height:80px;
}
.link-container{
height:40px;
line-height:40px;
}
.link-containera{
text-decoration:none;
}
</style>
</head>
<body>
<divclass="containerform-container">
<formaction="/wen/regist.do"method="post">
<divclass="form"><!--注冊表單開始-->
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-user"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
<inputtype="text"name="username"placeholder="請輸入用戶名">
</span>
</div>
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-key"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
<inputtype="password"name="password"placeholder="請輸入密碼">
</span>
</div>
<divclass="form-row">
<spanclass="cell-1">
<iclass="fafa-keyboard-o"></i>
</span>
<spanclass="cell-11"style="text-align:left;">
<inputtype="password"name="confirm"placeholder="請確認密碼">
</span>
</div>
<divclass="form-row">
<spanclass="cell-7">
<inputtype="text"name="verifyCode"placeholder="請輸入驗證碼">
</span>
<spanclass="cell-5"style="text-align:center;">
<imgsrc="/demo/verify/regist.do"onclick="myRefersh(this)">
</span>
</div>
<divclass="form-row"style="border:none;">
<spanclass="cell-6"style="text-align:left">
<inputtype="reset"value="重置">
</span>
<spanclass="cell-6"style="text-align:right;">
<inputtype="submit"value="注冊">
</span>
</div>
</div><!--注冊表單結束-->
</form>
</div>
</body>
</html>
效果如下圖:
當點擊刷新頁面的時候,驗證碼也會隨著變化,但我們看不清驗證碼時,只要點擊驗證碼就會刷新,這樣局部的刷新可以用JavaScript來實現。
在<img
src="/demo/verify/regist.do">中,添加一個問號和一串後綴數字,當刷新時讓後綴數字不斷改變,那麼形成的驗證碼也會不斷變化,我們可以採用的一種辦法是後綴數字用date代替,date獲取本機時間,時間是隨時變的,這樣就保證了刷新驗證碼可以隨時變化。
代碼如下:
functionmyRefersh(e){
constsource=e.src;//獲得原來的src中的內容
//console.log("source:"+source);
varindex=source.indexOf("?");//從source中尋找?第一次出現的位置(如果不存在則返回-1)
//console.log("index:"+index);
if(index>-1){//如果找到了?就進入內部
vars=source.substring(0,index);//從source中截取index之前的內容(index以及index之後的內容都被舍棄)
//console.log("s:"+s);
vardate=newDate();//創建一個Date對象的一個實例
vartime=date.getTime();//從新創建的Date對象的實例中獲得該時間對應毫秒值
e.src=s+"?time="+time;//將加了尾巴的地址重新放入到src上
//console.log(e.src);
}else{
vardate=newDate();
e.src=source+"?time="+date.getTime();
}
}
如回答不詳細可追問