Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Google Cloud Vision API ile Android'de Yüz Algılama ve Resimden Yazı Okutma
1. Proprietary + Confidential
Google Cloud Vision API ile Android'de
Yüz Algılama ve Resimden Yazı Okutma
Tuğba Üstündağ
Freelance Android Developer & Web Developer
www.tugbaustundag.com
2. Google Cloud Vision API Nedir?
Cloud Vision API yazılım geliştiricilerinin görüntü algılamayla alakalı işlerini
kolaylaştıran Google'in bir kütüphanesidir.
5. Face Detection(Yüz Algılama)
Context context = getApplicationContext();
FaceDetector detector = new FaceDetector.Builder(context)
.setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
.build();
detector.setProcessor(
new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
.build());
1- Face Detector( Yüz Algılayıcı) Tanımlama
6. Face Detection(Yüz Algılama)
2- Resmi Elde Etmek İçin Kamera Kodlarını Oluşturma
Daha önce tanımlamış olduğumuz detector sınıfını kullanarak kamera kodları ile,
resmi görüntülüyoruz .
CameraSource mCameraSource = new CameraSource.Builder(context, detector)
.setRequestedPreviewSize(640, 480)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedFps(30.0f)
.build();
7. Face Detection(Yüz Algılama)
3- Factory Sınıfı Oluşturma
Görüntüde birden fazla yüz bulunuyorsa, her birey için bir yüz izi(çerçevesi)
oluşturmak için kullanır.
private class GraphicFaceTrackerFactory implements MultiProcessor.Factory<Face>
{
@Override
public Tracker<Face> create(Face face) {
return new GraphicFaceTracker(mGraphicOverlay);
}
}
8. Face Detection(Yüz Algılama)
private class GraphicFaceTracker extends Tracker<Face> {
private FaceGraphic mFaceGraphic;
GraphicFaceTracker(GraphicOverlay overlay) {
mFaceGraphic = new FaceGraphic(overlay);
}
public void onNewItem(int faceId, Face face) { ... }
public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) { ... }
//Kameraya karşılık gelen yüz görüntüsü o an algılanmadıysa grafik gizlemesini sağlar
public void onMissing(FaceDetector.Detections<Face> detectionResults) { ... }
public void onDone() { ... }
4- Face Tracker( Yüz Çerçevesi) Oluşturma
9. Face Detection(Yüz Algılama)
5- Face Graphic Sınıfı Oluşturma
class FaceGraphic extends GraphicOverlay.Graphic {
@Override
public void draw(Canvas canvas) {
//Algılanan yüz üzerinde yazan track ID konumunun üstüne bir daire çizer.
float x = translateX(face.getPosition().x + face.getWidth() / 2);
float y = translateY(face.getPosition().y + face.getHeight() / 2);
canvas.drawCircle(x, y, FACE_POSITION_RADIUS, mFacePositionPaint);
canvas.drawText("id: " + mFaceId, x + ID_X_OFFSET, y + ID_Y_OFFSET, mIdPaint);
canvas.drawText("Mutluluk: " + String.format("%.2f", face.getIsSmilingProbability()), x -
ID_X_OFFSET, y - ID_Y_OFFSET, mIdPaint);
canvas.drawText("Sağ göz: " + String.format("%.2f", face.getIsRightEyeOpenProbability()),
x + ID_X_OFFSET * 2, y + ID_Y_OFFSET * 2, mIdPaint);
canvas.drawText("Sol göz: " + String.format("%.2f", face.getIsLeftEyeOpenProbability()), x -
ID_X_OFFSET*2, y - ID_Y_OFFSET*2, mIdPaint);
11. Resimden Yazı Okutma(Text Recognition - OCR)
Android Mobile Vision API OCR teknolojini kullanarak, yazılı resimlerdeki metinleri
uygulama içinde açtığı kamerayla kullanıcı ilgili resmi göstererek, resimdeki tüm
yazıyı basit bir şekilde Android uygulama içine almayı sağlamaktadır.
Optik Karakter Tanıma (OCR) Nedir?
Optik Karakter Tanıma (OCR), elektronik görüntüler üzerindeki
karakterlerin ya da metin bilgilerinin okunarak ASCII koda
dönüştürülmesi işlemidir.
13. Resimden Yazı Okutma(Text Recognition - OCR)
// Bir metin tanıyıcı metin bulmak için oluşturulur. İlişkili birden çok işlemci örneğin
metin tanıma sonuçlarını almak, metni izlemek ve ekranda her metin bloğu için grafik
cercevesine almak için kullanılır.
TextRecognizer textRecognizer = new TextRecognizer.Builder(context).build();
textRecognizer.setProcessor(new OcrDetectorProcessor(mGraphicOverlay));
1-Text Recognizer( Metin Tanıyıcı) Tanımlama
14. Resimden Yazı Okutma(Text Recognition - OCR)
//kamera oluşturur ve başlatır…
CameraSourcePreview mPreview = (CameraSourcePreview) findViewById(R.id.preview);
2-Resmi Elde Etmek İçin Kamera Kodlarını Oluşturma
CameraSource mCameraSource =
new CameraSource.Builder(getApplicationContext(), textRecognizer)
.setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedPreviewSize(1280, 1024)
.setRequestedFps(2.0f)
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH :
null)
.setFocusMode(autoFocus ?
Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null).build();
15. Resimden Yazı Okutma(Text Recognition - OCR)
3-Metin bloklarını okuma, algılama
public class OcrDetectorProcessor implements Detector.Processor<TextBlock> {
private GraphicOverlay<OcrGraphic> mGraphicOverlay;
@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
mGraphicOverlay.clear();
SparseArray<TextBlock> items = detections.getDetectedItems();
for (int i = 0; i < items.size(); ++i) {
TextBlock item = items.valueAt(i);
if (item != null && item.getValue() != null) {
Log.d("Text veri", "Text algılandı! " + item.getValue());
}
OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
mGraphicOverlay.add(graphic);
16. public class OcrGraphic extends GraphicOverlay.Graphic {
@Override
public void draw(Canvas canvas) {
// Metin bloklarının çevresini kutu çizimi yaparak sınırlar, belirtir
RectF rect = new RectF(mText.getBoundingBox());
rect.left = translateX(rect.left);
rect.top = translateY(rect.top);
rect.right = translateX(rect.right);
rect.bottom = translateY(rect.bottom);
canvas.drawRect(rect, sRectPaint);
List<? extends Text> textComponents = mText.getComponents();
for(Text currentText : textComponents) {
float left = translateX(currentText.getBoundingBox().left);
float bottom = translateY(currentText.getBoundingBox().bottom);
Resimden Yazı Okutma(Text Recognition - OCR)
4-Yazıların gösterilmesi ve çevresine çerçeve çizme