티스토리 뷰
명함 판독 앱에서 이름, 주소 등의 데이터를 가져오는 앱을 만들기 위해서는 OCR 기술과 명함 데이터 추출 알고리즘을 사용해야 합니다. OCR 기술을 사용하여 이미지에서 텍스트를 추출한 다음, 명함 데이터 추출 알고리즘을 사용하여 필요한 정보를 추출합니다.
아래는 Tesseract OCR 엔진과 OpenCV 라이브러리를 사용하여 명함에서 이름, 주소 등의 데이터를 추출하는 안드로이드 앱의 예제 코드입니다.
import android.graphics.Bitmap;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.googlecode.tesseract.android.TessBaseAPI;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
private static final String TESSERACT_DATA_PATH = "/tesseract/";
private static final String TESSERACT_LANG = "eng";
private static final String REGEX_PHONE_NUMBER = "(\\(\\d{3}\\)|\\d{3})[- .]?\\d{3}[- .]?\\d{4}";
private TessBaseAPI tessBaseAPI;
private Mat cardImage;
private Bitmap cardBitmap;
private final BaseLoaderCallback baseLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
if (status == LoaderCallbackInterface.SUCCESS) {
// OpenCV 초기화 성공
} else {
super.onManagerConnected(status);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tesseract OCR 초기화
tessBaseAPI = new TessBaseAPI();
tessBaseAPI.init(getExternalFilesDir(null) + TESSERACT_DATA_PATH, TESSERACT_LANG);
// 명함 이미지 가져오기
cardBitmap = ...
cardImage = new Mat();
Utils.bitmapToMat(cardBitmap, cardImage);
// 명함 이미지 전처리
preProcessImage(cardImage);
// 이름, 주소, 전화번호 추출
String name = extractName(cardImage);
String address = extractAddress(cardImage);
String phoneNumber = extractPhoneNumber(cardImage);
}
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, baseLoaderCallback);
}
private void preProcessImage(Mat image) {
// 명함 이미지 전처리
Mat gray = new Mat();
Mat blur = new Mat();
Mat edges = new Mat();
Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(gray, blur, new Size(5, 5), 0);
Imgproc.Canny(blur, edges, 75, 200);
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(9, 9));
Imgproc.dilate(edges, edges, element
반응형
'SWDesk > App' 카테고리의 다른 글
[Android] Bilient Navigator 출시 (0) | 2024.01.10 |
---|---|
[Android] WebView 예제 소스코드 (0) | 2024.01.05 |
앱에서 생성된 데이터를 카카오톡으로 보내는 소스 코드 (0) | 2023.03.04 |
[Kotlin] 블루투스 기기와의 연결 설정을 위한 소스 코드 (0) | 2023.02.26 |
웹뷰 내 사용자 클릭 결과를 처리하기 위한 자바 소스 코드 (0) | 2023.02.26 |
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 둎
- 심심풀이치매방지기
- 전압
- Video
- 티스토리챌린지
- Innovations&Hurdles
- image
- badp
- Hurdles
- Innovation&Hurdles
- bilient
- DYOV
- 아두이노
- 심심풀이
- arduino
- 오블완
- 치매
- 전류
- 혁신과허들
- 전압전류모니터링
- ServantClock
- 혁신
- Decorator
- 치매방지
- 절연형
- 빌리언트
- 허들
- 배프
- BSC
- Innovations
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함