گوگل کی مشین لرننگ ایس ڈی کے کی مدد سے تصاویر سے متن کیسے نکالا جا.

مصنف: John Stephens
تخلیق کی تاریخ: 27 جنوری 2021
تازہ کاری کی تاریخ: 5 جولائی 2024
Anonim
Python میں Google Vision API کا استعمال کرتے ہوئے تصویر OCR سے متن نکالیں۔
ویڈیو: Python میں Google Vision API کا استعمال کرتے ہوئے تصویر OCR سے متن نکالیں۔

مواد


آپ ٹیکسٹ ریکگنیشن API کو بھی ترجمے کی ایپس ، یا قابل رسا خدمات کی بنیاد کے طور پر استعمال کرسکتے ہیں جہاں صارف اپنے کیمرہ کو کسی بھی متن پر اشارہ کرسکتے ہیں جس کی وہ جدوجہد کر رہے ہیں ، اور اسے بلند آواز سے انھیں پڑھائیں۔

اس ٹیوٹوریل میں ، ہم ایک ایسی ایپ بنائیں گے جو صارف کی گیلری میں موجود کسی بھی شبیہہ سے متن نکال سکے۔ اگرچہ ہم اس ٹیوٹوریل میں اس کا احاطہ نہیں کریں گے ، لیکن آپ اس اطلاق کو آلے کے کیمرے سے مربوط کرکے حقیقی وقت میں صارف کے اطراف سے متن بھی حاصل کرسکتے ہیں۔

آلہ پر یا بادل میں؟

کچھ ایم ایل کٹ APIs صرف آنیوائس پر دستیاب ہیں ، لیکن کچھ آلے اور کلاؤڈ میں دستیاب ہیں ، جس میں ٹیکسٹ ریکگنیشن API بھی شامل ہے۔

کلاؤڈ بیسڈ ٹیکسٹ API زبانوں اور حروف کی وسیع رینج کی شناخت کرسکتا ہے ، اور اپنے آلہ کے ہم منصب سے کہیں زیادہ درستگی کا وعدہ کرتا ہے۔ تاہم ، یہ کرتا ہے ایک فعال انٹرنیٹ کنکشن کی ضرورت ہے ، اور یہ صرف بلیز سطح کے منصوبوں کے لئے دستیاب ہے۔

اس مضمون میں ، ہم مقامی طور پر ٹیکسٹ ریکگنیشن API چلا رہے ہیں ، لہذا آپ اس سے قطع نظر پیروی کرسکتے ہیں کہ آیا آپ نے بلیز میں اپ گریڈ کیا ہے ، یا آپ مفت فائر بیس اسپرک پلان پر ہیں۔


ایم ایل کٹ کے ساتھ ٹیکسٹ شناسی ایپ بنانا

اپنی پسند کی ترتیبات کے ساتھ ایپلی کیشن بنائیں ، لیکن جب اشارہ کیا جائے تو "خالی سرگرمی" کے سانچے کو منتخب کریں۔

ایم ایل کٹ ایس ڈی کے فائر بیس کا حصہ ہے ، لہذا آپ کو اپنے SHA-1 پر دستخط کرنے والے سرٹیفکیٹ کا استعمال کرتے ہوئے ، اپنے پروجیکٹ کو فائر بیس سے مربوط کرنے کی ضرورت ہوگی۔ اپنے پروجیکٹ کی SHA-1 حاصل کرنے کے لئے:

  • اینڈروئیڈ اسٹوڈیو کا "گریڈل" ٹیب منتخب کریں۔
  • "گریڈل پروجیکٹس" پینل میں ، اپنے منصوبے کی "روٹ" کو بڑھانے کے لئے ڈبل کلک کریں ، اور پھر "ٹاسک> اینڈروئیڈ> دستخطی رپورٹ" کو منتخب کریں۔
  • اینڈروئیڈ اسٹوڈیو ونڈو کے نیچے پینل کو اس پراجیکٹ کے بارے میں کچھ معلومات ظاہر کرنے کے لئے اپ ڈیٹ کرنا چاہئے۔ اس میں اس کے SHA-1 دستخطی سند بھی شامل ہے۔

اپنے منصوبے کو فائر بیس سے مربوط کرنے کے لئے:

  • اپنے ویب براؤزر میں ، فائر بیس کنسول لانچ کریں۔
  • "پروجیکٹ شامل کریں" کو منتخب کریں۔
  • اپنے منصوبے کو ایک نام دیں۔ میں "ایم ایل ٹیسٹ" استعمال کر رہا ہوں۔
  • شرائط و ضوابط پڑھیں ، اور اگر آپ آگے بڑھنے میں خوش ہیں تو پھر "میں قبول کرتا ہوں ..." منتخب کریں اور اس کے بعد "پروجیکٹ بنائیں"۔
  • "اپنے Android ایپ میں فائر بیس شامل کریں" کو منتخب کریں۔
  • اپنے پروجیکٹ کے پیکیج کا نام درج کریں ، جو آپ کو مین ایکٹیویٹی فائل کے اوپری حصے پر اور منشور کے اندر مل جائے گا۔
  • اپنے پروجیکٹ کا SHA-1 دستخطی سند داخل کریں۔
  • "رجسٹر ایپ" پر کلک کریں۔
  • "google-Services.json ڈاؤن لوڈ کریں۔" کو منتخب کریں۔ اس فائل میں آپ کے پروجیکٹ کے لئے فائر بیس میٹا ڈیٹا ، بشمول API کلید پر مشتمل ہے۔
  • اینڈروئیڈ اسٹوڈیو میں ، google-Services.json فائل کو اپنے پروجیکٹ کی "ایپ" ڈائرکٹری میں ڈریگ اور ڈراپ کریں۔


  • اپنی پروجیکٹ کی سطح کی بلڈ.gradle فائل کھولیں اور گوگل سروسز کی کلاسपथ شامل کریں:

کلاسپاتھ com.google.gms: گوگل سروسز: 4.0.1

  • اپنی ایپ لیول بلڈ مثال کی فائل کو کھولیں ، اور فائر بیس کور ، فائر بیس ایم ایل وژن اور ماڈل ترجمان کے علاوہ Google سروسز پلگ ان کے لئے انحصار شامل کریں:

پلگ ان لاگو کریں: com.google.gms.google-Services ... ... ... انحصار {عمل درآمد فائل درخت (dir: libs ، شامل ہیں:) عمل درآمد com.google.firebase: فائر بیس کور: 16.0.1 عمل درآمد com۔ google.firebase: firebase-ml-وژن: 16.0.0 عمل درآمد com.google.firebase: فائر بیس- ml-ماڈل-ترجمان: 16.0.0

اس مقام پر ، آپ کو اپنا پروجیکٹ چلانے کی ضرورت ہوگی تاکہ یہ فائر بیس سرورز سے رابطہ قائم کرسکے۔

  • اپنی ایپ کو یا تو جسمانی اینڈرائڈ اسمارٹ فون یا ٹیبلٹ ، یا اینڈروئیڈ ورچوئل ڈیوائس (اے وی ڈی) پر انسٹال کریں۔
  • فائر بیس کنسول میں ، "انسٹالیشن کی تصدیق کے لئے ایپ چلائیں" کو منتخب کریں۔
  • کچھ لمحوں کے بعد ، آپ کو ایک "مبارکباد" دیکھنا چاہئے؛ "کنسول پر جاری رکھیں" کو منتخب کریں۔

گوگل کے پہلے سے تربیت یافتہ مشین سیکھنے کے ماڈل ڈاؤن لوڈ کریں

ڈیفالٹ کے مطابق ، ایم ایل کٹ صرف اسی طرح کے ماڈل ڈاؤن لوڈ کرتی ہے اور جب انہیں ضرورت ہو ، لہذا جب ہماری پہلی بار صارف متن کو نکالنے کی کوشش کرے گا تو ہماری ایپ OCR ماڈل ڈاؤن لوڈ کرے گی۔

اس سے صارف کے تجربے پر ممکنہ طور پر منفی اثر پڑ سکتا ہے - کسی خصوصیت تک رسائی حاصل کرنے کی کوشش کرنے کا تصور کریں ، صرف یہ دریافت کریں کہ ایپ کو اس خصوصیت کی فراہمی سے قبل مزید وسائل ڈاؤن لوڈ کرنے پڑیں گے۔ خراب صورتحال میں ، ہوسکتا ہے کہ آپ کی ایپ وسائل کو اپنی ضرورت کے مطابق ڈاؤن لوڈ کرنے کے قابل بھی نہ ہو ، مثال کے طور پر اگر اس آلے کا انٹرنیٹ کنیکشن نہیں ہے۔

یہ یقینی بنانے کے لئے کہ یہ ہماری ایپ کے ساتھ نہیں ہوتا ہے ، میں انسٹال وقت کے وقت ضروری او سی آر ماڈل ڈاؤن لوڈ کرنے جارہا ہوں ، جس میں مینیسٹ میں کچھ تبدیلیوں کی ضرورت ہے۔

جبکہ ہمارے پاس منشور کھلا ہوا ہے ، میں WRITE_EXTERNAL_STORAGE اجازت بھی شامل کرنے جا رہا ہوں ، جسے ہم بعد میں اس سبق میں استعمال کریں گے۔

// WRITE_EXTERNAL_STORAGE اجازت شامل کریں // // درج ذیل میں شامل کریں //

لے آؤٹ کی تعمیر

آئیے آسانی سے آسان چیزیں نکالیں ، اور ایک ایسی ترتیب تیار کریں جس پر مشتمل ہو:

  • ایک تصویری نظارہ۔ ابتدائی طور پر ، یہ ایک پلیس ہولڈر کو ظاہر کرے گا ، لیکن اس کے تازہ کاری ہوجائے گی جب صارف اپنی گیلری سے کسی تصویر کو منتخب کرے گا۔
  • ایک بٹن ، جو متن کو نکالنے کا کام کرتا ہے۔
  • ایک ٹیکسٹ ویو ، جہاں ہم نکالے ہوئے متن کو ظاہر کریں گے۔
  • ایک سکرول ویو۔ چونکہ اس بات کی کوئی گارنٹی نہیں ہے کہ نکالا ہوا متن اسکرین اسکرین پر پورے طور پر فٹ ہوجائے گا ، لہذا میں اس ٹیکسٹ ویو کو اسکرول ویو میں رکھوں گا۔

یہاں تکمیل شدہ سرگرمی_تعلیم.ایم ایل فائل فائل ہے۔

یہ لے آؤٹ ایک "آئی سی_ پلیس ہولڈر" ڈرائبل کا حوالہ دیتا ہے ، لہذا اب اسے تخلیق کریں:

  • اینڈروئیڈ اسٹوڈیو ٹول بار سے "فائل> نیا> تصویری اثاثہ" منتخب کریں۔
  • "آئیکن ٹائپ" ڈراپ ڈاؤن کو کھولیں اور "ایکشن بار اور ٹیب شبیہیں" منتخب کریں۔
  • یقینی بنائیں کہ "کلپ آرٹ" ریڈیو بٹن منتخب کیا گیا ہے۔
  • "کلپ آرٹ" بٹن پر ایک کلک دیں۔
  • وہ تصویر منتخب کریں جسے آپ اپنے پلیس ہولڈر کے بطور استعمال کرنا چاہتے ہیں۔ میں "فوٹو میں شامل کریں" کا استعمال کر رہا ہوں۔
  • "ٹھیک ہے" پر کلک کریں۔
  • "تھیم" ڈراپ ڈاؤن کو کھولیں ، اور "HOLO_LIGHT" کو منتخب کریں۔
  • "نام ،" فیلڈ میں ، "آئیک_ پلیس ہولڈر" داخل کریں۔
  • "اگلا۔" پر کلک کریں۔ معلومات پڑھیں ، اور اگر آپ آگے بڑھنے میں خوش ہیں تو پھر "ختم" پر کلک کریں۔

ایکشن بار شبیہیں: گیلری کی ایپ لانچ ہو رہی ہے

اگلا ، میں ایک ایکشن بار آئٹم تیار کرنے جا رہا ہوں جو صارف کی گیلری لانچ کرے گا ، ان کے لئے تصویر منتخب کرنے کے لئے تیار ہے۔

آپ مینو ریسورس فائل کے اندر ایکشن بار شبیہیں متعین کرتے ہیں ، جو "ریس / مینو" ڈائرکٹری کے اندر رہتی ہے۔ اگر آپ کے پروجیکٹ میں یہ ڈائرکٹری موجود نہیں ہے تو آپ کو اسے بنانے کی ضرورت ہوگی۔

  • اپنے پروجیکٹ کی "ریس" ڈائریکٹری کو کنٹرول کریں اور "نیو> اینڈروئیڈ ریسورس ڈائرکٹری" کو منتخب کریں۔
  • "وسائل کی قسم" ڈراپ ڈاؤن ڈاؤن کھولیں اور "مینو" کو منتخب کریں۔
  • "ڈائرکٹری کا نام" خود بخود "مینو" میں اپ ڈیٹ ہوجائے ، لیکن اگر ایسا نہیں ہوتا ہے تو آپ کو دستی طور پر اس کا نام تبدیل کرنے کی ضرورت ہوگی۔
  • "ٹھیک ہے" پر کلک کریں۔

اب آپ مینو ریسورس فائل بنانے کے لئے تیار ہیں:

  • اپنے پروجیکٹ کی "مینو" ڈائریکٹری کو کنٹرول کریں اور "نیا> مینو ریسورس فائل" کو منتخب کریں۔
  • اس فائل کا نام "my_menu" رکھیں۔
  • "ٹھیک ہے" پر کلک کریں۔
  • "my_menu.xML" فائل کھولیں ، اور درج ذیل کو شامل کریں:

// بنائیں a ہر عمل کے لئے عنصر //

مینو فائل ایک "ایکشن_گیلری" سٹرنگ کا حوالہ دیتی ہے ، لہذا اپنے پروجیکٹ کی ریز / ویلیوز / ڈور۔ ایکس ایم ایل فائل کو کھولیں اور یہ وسیلہ تشکیل دیں۔ جب میں یہاں ہوں تو ، میں اس دوسرے پروجیکٹ کے دوران دوسرے تاروں کو بھی استعمال کر رہا ہوں جن کو ہم استعمال کریں گے۔

گیلری اس ایپ کو آپ کے آلے پر فائلوں تک رسائی حاصل کرنے کی ضرورت ہے۔ کوئی متن نہیں ملا

اگلا ، ایکشن بار کے "آئیک_گلری" آئیکن کو بنانے کے لئے امیج اثاثہ اسٹوڈیو کا استعمال کریں:

  • "فائل> نیا> تصویری اثاثہ" منتخب کریں۔
  • "آئیکن ٹائپ" ڈراپ ڈاؤن کو "ایکشن بار اور ٹیب شبیہیں" پر سیٹ کریں۔
  • "کلپ آرٹ" بٹن پر کلک کریں۔
  • ایک ڈرائبل کا انتخاب کریں؛ میں "امیج" استعمال کر رہا ہوں۔
  • "ٹھیک ہے" پر کلک کریں۔
  • ایکشن بار میں یہ آئیکن واضح طور پر دکھائی دینے کے ل، ، "تھیم" ڈراپ ڈاؤن کو کھولیں اور "HOLO_Dark" کو منتخب کریں۔
  • اس آئیکن کو "آئیک_گیلری" کا نام دیں۔
  • "ختم" کے بعد "اگلا ،" پر کلک کریں۔

اجازت کی درخواستوں کو ہینڈل کرنا اور پروگراموں پر کلک کریں

میں وہ تمام کام انجام دینے جا رہا ہوں جو بیس ایکٹیویٹی کلاس میں علیحدہ بیس ایکٹیویٹی کلاس میں ٹیکسٹ ریکگنیشن API سے براہ راست تعلق نہیں رکھتے ہیں ، بشمول مینو کو تیز کرنا ، ایکشن بار کل ایونٹ کو سنبھالنا ، اور ڈیوائس کے اسٹوریج تک رسائی کی درخواست کرنا۔

  • اینڈروئیڈ اسٹوڈیو کے ٹول بار سے "فائل> نیا> جاوا کلاس" منتخب کریں۔
  • اس کلاس کا نام "بیس ایکٹیویٹی" رکھیں۔
  • "ٹھیک ہے" پر کلک کریں۔
  • بیس ایکٹیویٹی کھولیں ، اور درج ذیل شامل کریں:

android.app.Activity درآمد کریں۔ android.support.v4.app.ActivityCompat درآمد کریں؛ درآمد کریں android.support.v7.app.ActionBar؛ android.support.v7.app.AlertDialog درآمد کریں۔ android.support.v7.app.appCompatActivity درآمد کریں۔ android.os.Bundle درآمد کریں۔ android.content.DialogInterface درآمد کریں؛ android.content.Intant درآمد کریں۔ درآمد android.ManLive؛ درآمد android.provider.MediaStore؛ درآمد android.view.Menu؛ درآمد android.view.MenuItem؛ android.content.pm.PackageManager درآمد کریں؛ android.net.Uri درآمد کریں؛ android.provider.Settings درآمد کریں۔ درآمد android.support.annotation.NonNull؛ درآمد کریں android.support.annotation.Alalable؛ درآمد java.io.File؛ پبلک کلاس بیس اکیٹیویٹی ایپ کامپٹ ایکٹیویٹی میں توسیع؛ عوامی جامد فائنل INR WRITE_STORAGE = 100؛ عوامی جامد حتمی شکل SELECT_PHOTO = 102؛ عوامی جامد حتمی اسٹرنگ ACTION_BAR_TITLE = "ایکشن_بار_ ٹائٹل"؛ عوامی فائل کی تصویر؛ @ آورائڈائڈ محفوظ شدہ باطل آن کریٹیٹ (@ نونبل بنڈل سیویڈ انسٹنس اسٹیٹ) {سوپر.ونریکریٹ (سیویڈ انسٹینس اسٹیٹ)؛ ایکشن بار ایکشن بار = getSupportActionBar ()؛ if (ایکشن بار! = null) {actionBar.setDisplayHomeAsUpEn सक्षम (سچ)؛ ایکشن بار.سیٹ ٹائٹل (getIntent (). getStringExtra (ACTION_BAR_TITLE))؛ re}CreateOptionsMenu (مینو مینو) پر عوامی بلین کو اوور رائیڈ کریں {getMenuInflater (). inflate (R.menu.my_menu، مینو)؛ سچ لوٹنا؛ } @ اوورائڈ پبلک بولین onOptionsItemSelected (MenuItem item) {سوئچ (item.getItemId ()) {// اگر "گیلری_عاملہ" منتخب کیا گیا ہے ، تو .... // کیس R.id.gallery_action: //...check WRITE_STORAGE اجازت // چیک پریمیشن (WRITE_STORAGE)؛ توڑ super واپس سپر.اختیارات آئٹمز منتخب (آئٹم)؛ e @ آورڈائڈ پبلک باطل آنرکیویسٹ پیریمیشنسلسٹ (INTT درخواست کوڈ ، @ نونولول اسٹرنگ اجازت ، @ نونوللٹ گرانٹ ریسلٹس) {super.onRequestPerificationsResult (درخواست کوڈ ، اجازت ، گرانٹ ریسلٹس)؛ سوئچ (درخواست کوڈ) {کیس WRITE_STORAGE: // اگر اجازت کی درخواست منظور ہوجائے ، تو .... // اگر (अनुदान / تجربے.قامت> 0 && <<< &&Ranserts == PackageManager.PERMISSION_GRANTED) .. //...Call منتخب تصویر / منتخب تصویر (منتخب کریں) )؛ // اگر اجازت کی درخواست سے انکار کیا گیا ہے تو ، پھر .... //} دوسری {//... "اجازت_دیکعت" اسٹرنگ // کی درخواست // درخواست کی اجازت (یہ ، درخواست کوڈ ، R.string.permission_request)؛ } توڑ }} // اجازت کی درخواست ڈائیلاگ ڈسپلے کریں // عوامی جامد باطل درخواست کی اجازت (حتمی سرگرمی کی سرگرمی ، فائنل انٹرویوٹ کوڈ ، INT)) ler الرٹ ڈائیلاگ۔ بلڈر الرٹ = نیا الرٹ ڈائیلاگ۔ بلڈر (سرگرمی)؛ الرٹ.سیٹ (#)؛ الرٹ.سیٹپوزیٹیو بٹن (android.R.string.ok، new DialogInterface.OnClickListener () {Oideride پبلک باطل آن کلیک (ڈائیلاگ انٹی فرفاس ڈائیلاگ انٹر فرفیس، INT) .setData (Uri.parse ("package:" + પ્રવૃત્તિ.getPackageName ()))؛ પ્રવૃત્તિ.سٹارٹ ایوکیٹیفورٹ ریسلٹ (اجازت نامہ ، درخواست کوڈ)؛}})؛ الرٹ. سیٹ نیجیٹیو بٹن (android.R.string.cancel، new DialogInterface.OnClickListener () {Override پبلک باطل آن کلیک (DialogInterface UsedInterface، IN i) {editInterface.dismiss ()؛}}))؛ الرٹ۔ سیٹ کینسل (غلط)؛ चेतावनी.شو ()؛ } // یہ چیک کریں کہ آیا صارف نے WRITE_STORAGE اجازت دے دی ہے // عوامی باطل چیکپرمیشن (انٹرویوٹ کوڈ) {سوئچ (ریکوڈ کوڈ) {کیس WRITE_STORAGE: # haswriteExternStoragePermission = ActivityCompat.checkSelfPermission (یہ ، Manifest.permission.WRITE_EXTERNALGP) // اگر ہمارے پاس بیرونی اسٹوریج تک رسائی ہے ... // if (hasWriteExternStoragePermission == PackageManager.PERMISSION_GRANTED) {//...Call منتخب تصویر ، جس نے ایسی سرگرمی کا آغاز کیا جہاں صارف کسی تصویر کو منتخب کرسکتا ہے // منتخب تصویر ()؛ // اگر اجازت نہیں دی گئی ہے تو ، پھر ... //} else {//... اجازت کی درخواست کریں // ActivityCompat.requestPerifications (یہ ، نئے اسٹرنگ {Manifest.permission.WRITE_EXTERNAL_STORAGE} ، درخواست کوڈ)؛ } توڑ }} نجی باطل منتخب تصویر () {تصویر = MyHelper.createTempFile (تصویر)؛ ارادے کا ارادہ = نیا ارادہ (نیت ۔اختیارپاک ، میڈیا اسٹور۔آئی ایمجس۔میڈیا۔ ٹیکٹرنل_کونٹ) // ایک ایسی سرگرمی شروع کریں جہاں صارف کسی تصویر کا انتخاب کرسکے // startActivityForResult (ارادے ، SELECT_PHOTO)؛ }

اس مقام پر ، آپ کے پروجیکٹ کو یہ شکایت کرنی چاہئے کہ یہ MyHelper.createTempFile کو حل نہیں کرسکتا ہے۔ آئیے اب اس پر عمل درآمد کریں!

کریٹیمپ فائل کے ساتھ تصاویر کا سائز تبدیل کرنا

ایک نیا "مائی ہیلپر" کلاس بنائیں۔ اس کلاس میں ، ہم صارف کی منتخب کردہ تصویر کا سائز تبدیل کرنے جارہے ہیں ، جسے ٹیکسٹ ریکگنیشن API کے ذریعہ کارروائی کی جائے گی۔

درآمد android.رافکس. بٹ میپ؛ درآمد android.رافکس. بٹ میپ فیکٹری؛ android.content.Context درآمد کریں؛ درآمد android.datedia.Cseror؛ درآمد android.os.En वातावरण؛ امپورٹ کریں android.widget.ImageView؛ درآمد android.provider.MediaStore؛ android.net.Uri درآمد کریں؛ امپورٹڈ android.graphics.BitmapFactory.decodeFile درآمد کریں۔ امپورٹڈ android.graphics. بٹ میپ فیکٹری۔ ڈیک کوڈ اسٹریم۔ درآمد java.io.File؛ java.io.FileNotFoundException درآمد کریں؛ java.io.FileOutputStream درآمد کریں؛ درآمد java.io.IOEception؛ عوامی کلاس MyHelper {عوامی جامد اسٹرنگ getPath (سیاق و سباق ، Uri uri) {سٹرنگ کا راستہ = ""؛ سٹرنگ پروجیکشن = {MediaStore.Images.Media.DATA}؛ کرسر کرسر = سیاق و سباق. مطابقت پذیری ریسرور (). استفسار (uri، پروجیکشن، null، null، null)؛ int کالم_ہندکس؛ اگر (کرسر! = منسوخ) {کالم_انڈیکس = کرسر. گیٹ کالم انڈیکس آرٹرو (MediaStore.Images.Media.Data)؛ کرسر.میوو ٹو فرسٹ ()؛ پاتھ = کرسر۔ گیٹ سٹرنگ (کالم_ انڈیکس)؛ कर्سر.کلوز ()؛ } واپسی کا راستہ؛ } عوامی جامد فائل #TempFile (فائل فائل) {فائل ڈائرکٹری = نئی فائل (ماحولیات ۔getExternStorageDirectory (). getPath () + "/com.jessicathornsby.myapplication")؛ اگر (! ডিরেক্টরি.exists () ||! निर्देशिका.isD Directory ()). निर्देशिका.mkdirs ()؛ } if (file == null) {file = new file (ڈائرکٹری ، "original.jpg")؛ } فائل کی واپسی stat عوامی جامد بٹ نقشہ بازآبادی فوٹو (فائل تصویری فائل ، سیاق و سباق کی سیاق و سباق ، اوری uri ، تصویری نظارہ دیکھیں) it BitmapFactory.Options newOptions = new BitmapFactory.Options ()؛ کوشش کریں ode ڈیکوڈ اسٹریم (سیاق و سباق). مطابقت پذیری ریسرور (). اوپن ان پٹ اسٹریم (uri) ، کال ، نیو ایپشن)؛ int فوٹو ہائٹ = newOptions.outHeight؛ int فوٹو وڈتھ = newOptions.outWidth؛ newOptions.inSampleSize = Math.min (photoWidth / view.getWidth ()، photoHeight / view.getHeight ())؛ واپس آنے والے کمپریس فوٹو (امیج فائل ، بٹ میپ فیکٹری۔ ڈیک کوڈ اسٹریم (سیاق و سباق). کانٹینٹ ریسرور (). اوپن ان پٹ اسٹریم (uri) ، کال ، نیو اپشنز))؛ } کیچ (فائل نٹ فاؤنڈ ایکسپینیشن استثنیٰ) {exception.printStackTrace ()؛ واپس منسوخ؛ stat} عوامی جامد بٹ نقشہ بازآبادی فوٹو (فائل تصویری فائل ، سٹرنگ کا راستہ ، تصویری نظارہ دیکھیں) it بٹ میپ فیکٹری ۔آپشن کے اختیارات = نیا بٹ میپ فیکٹری ۔آپس ()؛ ڈیکوڈفائل (راستہ ، اختیارات)؛ int فوٹو ہائٹ = اختیارات۔ آؤٹ ہائٹ؛ int فوٹو وڈتھ = اختیارات۔ آؤٹ چوڑائی؛ વિકલ્પો.inSampleSize = Math.min (photoWidth / view.getWidth ()، photoHight / view.getHeight ())؛ کمپریس فوٹو واپس (تصویری فائل ، بٹ میپ فیکٹری۔ ڈیکوڈفائل (راستہ ، اختیارات))؛ } نجی جامد بٹ میپ سکیڑیں فوٹو (فائل فوٹو فائل ، بٹ نقشہ بٹ نقشہ) {کوشش کریں {فائل آؤٹ پٹ اسٹریم fOutput = نیا فائل آؤٹ پٹ اسٹریم (فوٹو فائل)؛ بٹ میپ ڈاٹ کام (Bitmap.Compress Format.JPEG، 70، foutut)؛ fOutput.close ()؛ } کیچ (IOException استثنا) {exception.printStackTrace ()؛ bit بٹ میپ واپس؛ }

تصویر کو کسی امیج ویو پر سیٹ کریں

اگلا ، ہمیں اپنی مین ایکٹیویٹی کلاس میں "ActivityResult () کو نافذ کرنے کی ضرورت ہے ، اور صارف کی منتخب کردہ تصویر کو ہمارے امیج ویو پر سیٹ کریں۔

درآمد android.رافکس. بٹ میپ؛ android.os.Bundle درآمد کریں۔ امپورٹ کریں android.widget.ImageView؛ android.content.Intant درآمد کریں۔ درآمد android.widget.TextView؛ android.net.Uri درآمد کریں؛ عوامی طبقے کی مین ایکٹیویٹی نے بیس ایکٹیویٹی extend پرائیویٹ بٹ میپ مائی بٹ میپ میں توسیع نجی امیجویو نجی ٹیکسٹ ویو میرا ٹیکسٹ ویو؛ @ اووررائڈ محفوظ باطل آن کریٹیٹ (بنڈل سیفڈ انسٹنس اسٹیٹ) {سوپر ڈاٹ کریٹیٹ (سیفڈ انسٹینس اسٹیٹ)؛ سیٹ کانٹ ویو (R.layout.activity_main)؛ myTextView = findViewById (R.id.textView)؛ myImageView = findViewById (R.id.imageView)؛ } @ آورائڈائڈ محفوظ ہے باضابطہ نتیجہ (سرگرمی کی درخواست ، کوڈ ، نتیجہ نتیجہ کوڈ ، نیت ڈیٹا)) سپر.اوان سرگرمی کا نتیجہ (درخواست کوڈ ، رزلٹ کوڈ ، ڈیٹا)؛ اگر (نتیجہ کوڈ == RESULT_OK) {سوئچ (درخواست کوڈ) {معاملہ WRITE_STORAGE: چیک پرمیشن (درخواست کوڈ)؛ توڑ کیس SELECT_PHOTO: Uri dataUri = data.getData ()؛ سٹرنگ پاتھ = MyHelper.getPath (یہ ، ڈیٹاآوری)؛ if (path == null) {myBitmap = MyHelper.resizePhoto (تصویر ، یہ ، ڈیٹاآوری ، myImageView)؛ } else {myBitmap = MyHelper.resizePhoto (تصویر ، پاتھ ، myImageView)؛ } if (myBitmap! = null) {myTextView.setText (null)؛ myImageView.setImageBitmap (myBitmap)؛ } توڑ }}}}

اس پروجیکٹ کو جسمانی اینڈروئیڈ ڈیوائس یا اے وی ڈی پر چلائیں ، اور ایکشن بار آئیکون پر ایک کلک دیں۔ جب اشارہ کیا جائے تو ، WRITE_STORAGE کو اجازت دیں اور گیلری سے ایک تصویر منتخب کریں۔ اب یہ تصویر آپ کی ایپ کے UI میں آویزاں ہونی چاہئے۔

اب ہم نے بنیاد رکھی ہے ، ہم کچھ متن نکالنا شروع کرنے کے لئے تیار ہیں!

متن کو پہچاننے کے لئے ایپ کو پڑھانا

میں کسی کلک پروگرام کے جواب میں متن کی پہچان کو متحرک کرنا چاہتا ہوں ، لہذا ہمیں آن کلیک لسٹنر کو نافذ کرنے کی ضرورت ہے۔

درآمد android.رافکس. بٹ میپ؛ android.os.Bundle درآمد کریں۔ امپورٹ کریں android.widget.ImageView؛ android.content.Intant درآمد کریں۔ درآمد android.widget.TextView؛ درآمد android.view.View؛ android.net.Uri درآمد کریں؛ عوامی طبقے کی مین ایکٹیویٹی نے بیس ایکٹیویٹی کے نفاذ کو دیکھیں میں شامل کریں۔ اون کلیک لسٹنر {نجی بٹ میپ مائی بٹ نقشہ؛ نجی امیجویو نجی ٹیکسٹ ویو میرا ٹیکسٹ ویو؛ @ اووررائڈ محفوظ باطل آن کریٹیٹ (بنڈل سیفڈ انسٹنس اسٹیٹ) {سوپر ڈاٹ کریٹیٹ (سیفڈ انسٹینس اسٹیٹ)؛ سیٹ کانٹ ویو (R.layout.activity_main)؛ myTextView = findViewById (R.id.textView)؛ myImageView = findViewById (R.id.imageView)؛ FindViewById (R.id.checkText) .setOnClickListener (یہ)؛ } @ اوور رائڈ پبلک باطل آن کلیک (دیکھیں منظر) {سوئچ (دیکھیں.getId ()) {کیس R.id.checkText: اگر (myBitmap! = null) {// ہم اگلے مرحلے میں runTextRecog کو نافذ کریں گے // رن ٹیکسٹ ریکوگ ()؛ } توڑ }

ایم ایل کٹ صرف اس وقت تصاویر پر کارروائی کرسکتا ہے جب وہ فائر بیس ویژن آئیج فارمیٹ میں ہوں ، لہذا ہمیں اپنی شبیہ کو فائر بیس ویژن آئیجج آبجیکٹ میں تبدیل کرنے کی ضرورت ہے۔ آپ ایک بٹ نقشہ ، میڈیا۔ایمیجیز ، بائٹ بفر ، یا بائٹ صف سے فائربیس ویوژن امیج تشکیل دے سکتے ہیں۔ چونکہ ہم بٹ میپ کے ساتھ کام کر رہے ہیں ، لہذا ہمیں فائر بیس ویژن آئیگیج کلاس کے بٹ میپ () افادیت کے طریقہ کار کو کال کرنے کی ضرورت ہے اور اسے اپنا بٹ نقشہ پاس کرنا ہوگا۔

نجی باطل رنٹیکسٹ ریکیک () {فائر بیس ویژنآئیجیج کی تصویر = فائر بیس ویژنآیمیج۔ فریم بٹ میپ (مائی بٹ میپ)؛

ایم ایل کِٹ میں اپنی ہر تصویری شناخت کے کاموں کے لئے مختلف ڈیٹیکٹر کلاسز ہیں۔ متن کے ل we ، ہمیں فائر بیس ویزن ٹیکسٹ ڈیٹیکٹر کلاس استعمال کرنے کی ضرورت ہے ، جو شبیہہ پر آپٹیکل کریکٹر ریکگنیشن (OCR) انجام دیتا ہے۔

ہم getVisionTextDetector کا استعمال کرتے ہوئے ، فائر بیس ویزن ٹیکسٹٹیکٹر کی ایک مثال تیار کرتے ہیں۔

فائر بیس ویژنٹیکسٹ ڈیٹیکٹر ڈیٹیکٹر = فائر بیس ویژن.بیٹ انسٹینس (). getVisionTextDetector ()؛

اگلا ، ہمیں ٹیکسٹ کے لئے فائر بیس ویوژن آئیمیج کی جانچ پڑتال کرنے کی ضرورت ہے ، ڈٹیکٹ ان آئیمج () طریقہ کو کال کرکے اور اسے فائربیس ویوژن آئیجج آبجیکٹ کو پاس کرتے ہوئے۔ ہمیں onSuccess اور onFailure callbacks ، نیز متعلقہ سننے والوں کو بھی نافذ کرنے کی ضرورت ہے تاکہ جب بھی نتائج دستیاب ہوں ہماری ایپ کو مطلع کیا جائے۔

ڈٹیکٹر.ڈیٹیکٹ انیجج (امیج) .ایڈ آؤن سکس لیسٹنر (نیا آن سکس لیسٹنر() {@ اووررائڈ // کرنا //}})۔ addOnFailureListener (new OnFailureListener () {Override پبلک باطل onFailure (NonNull استثناء استثناء) {// ایک رعایت کے ساتھ ٹاسک ناکام ہوگیا //}})؛ }

اگر یہ کاروائی ناکام ہوجاتی ہے تو میں ایک ٹوسٹ ڈسپلے کرنے جارہا ہوں ، لیکن اگر آپریشن کامیابی ہے تو میں اس کے جواب کے ساتھ عملدرآمد کو بھیجوں گا۔

اس مقام پر ، میرا متن کا پتہ لگانے کا کوڈ اس طرح لگتا ہے:

// فائر بیس ویژن آئیجیم بنائیں // نجی باطل رن ٹیکسٹ ریکیک () {فائر بیس ویژن آئیج امیج = فائر بیس ویژن آئیمیج۔ فریم بٹ میپ (مائی بٹ میپ)؛ // فائر بیس ویزن کلاؤڈٹیکسٹ ڈیٹیکٹر کی ایک مثال بنائیں // فائر بیس ویژنٹیکسٹ ڈیٹیکٹر کا پتہ لگانے والا = فائر بیس ویژن.بیٹ انسٹینس (). getVisionTextDetector ()؛ // آن سکس لیسٹنر کا اندراج کریں // ڈیٹیکٹر.ڈیٹیکٹ آئی این آئیجج (امیج) .ایڈ ان آن سکس لیسٹنر (نیا آن سکس لیسٹنر() {@ اووررائڈ // آن سکس کال بیک بیک نافذ کریں // عوامی صفر آن سکس (فائر بیس ویزن ٹیکسٹ ٹیکسٹس) {// ردعمل کے ساتھ کال پراسیکس ٹریکٹ ٹیکسٹ (عمل) ٹیکسٹ ٹیکسٹ (نصوص)؛ }}). addOnFailureListener (new OnFailureListener () {Orride // theFailure Calback // Public Void onFailure (NonNull Exception استثنا) نافذ کریں {Toast.makeText (MainActivity.this ، "استثناء" ، ٹوسٹ. ایل این جی تھلوگ)۔ )؛}})؛ }

جب بھی ہماری ایپ کو آنسو کامیابی کی اطلاع ملتی ہے ، ہمیں نتائج کو تجزیہ کرنے کی ضرورت ہوتی ہے۔

فائر بیس ویژن ٹیکسٹ آبجیکٹ میں عناصر ، لائنیں اور بلاکس شامل ہوسکتے ہیں ، جہاں ہر بلاک عام طور پر متن کے کسی ایک پیراگراف کے برابر ہوتا ہے۔ اگر فائر بیس ویژنٹیکسٹ 0 بلاکس کو لوٹاتا ہے ، تو ہم "no_text" سٹرنگ دکھائیں گے ، لیکن اگر اس میں ایک یا زیادہ بلاکس شامل ہیں تو ہم بازیافت شدہ متن کو اپنے ٹیکسٹ ویو کے حصے کے طور پر ظاہر کریں گے۔

نجی باطل پروسیسرٹ ٹریکٹ ٹیکسٹ (فائر بیس ویوژن ٹیکسٹ فائر بیس ویژن ٹیکسٹ) {مائی ٹیکسٹ ویو.سیٹ ٹیکسٹ (کالعدم)؛ اگر (فائر بیس ویژنٹیکسٹ.بیٹ بلاکس (). سائز () == 0) {مائی ٹیکسٹ ویو.سیٹ ٹیکسٹ (R.string.no_text)؛ واپسی Fire کے لئے (فائر بیس ویژنٹیکسٹ۔ بلاک بلاک: فائر بیس ویژنٹیکسٹ.بیٹ بلاکس ()) T مائی ٹیکسٹ ویو۔اپینڈ (block.getText ())؛ }}}

یہاں مین ایکٹیویٹی کوڈ مکمل ہے۔

درآمد android.رافکس. بٹ میپ؛ android.os.Bundle درآمد کریں۔ امپورٹ کریں android.widget.ImageView؛ android.content.Intant درآمد کریں۔ درآمد android.widget.TextView؛ درآمد android.widget.Toast؛ درآمد android.view.View؛ android.net.Uri درآمد کریں؛ درآمد android.support.annotation.NonNull؛ com.google.firebase.ML.vision.common.FirebaseVisionI تصور درآمد کریں؛ com.google.firebase.ML.vision.text.FirebaseVisionText درآمد کریں؛ com.google.firebase.ML.vision.text.FirebaseVisionTextDetector درآمد کریں؛ com.google.firebase.ML.vision.FirebaseVision درآمد کریں؛ com.google.android.gms.tasks.OnSuccessListener درآمد کریں؛ com.google.android.gms.tasks.OnFailureListener درآمد کریں؛ عوامی طبقے کی مین ایکٹیویٹی نے بیس ایکٹیویٹی کے نفاذ کو دیکھیں میں شامل کریں۔ اون کلیک لسٹنر {نجی بٹ میپ مائی بٹ نقشہ؛ نجی امیجویو نجی ٹیکسٹ ویو میرا ٹیکسٹ ویو؛ @ اووررائڈ محفوظ باطل آن کریٹیٹ (بنڈل سیفڈ انسٹنس اسٹیٹ) {سوپر ڈاٹ کریٹیٹ (سیفڈ انسٹینس اسٹیٹ)؛ سیٹ کانٹ ویو (R.layout.activity_main)؛ myTextView = findViewById (R.id.textView)؛ myImageView = findViewById (R.id.imageView)؛ FindViewById (R.id.checkText) .setOnClickListener (یہ)؛ } @ اوور رائیڈ پبلک باطل آن کلیک (دیکھیں منظر) {سوئچ (دیکھیں.getId ()) {کیس R.id.checkText: اگر (myBitmap! = null) {runTextRecog ()؛ } توڑ c} @ آورائڈائڈ محفوظ کردہ باطل باضابطہ نتائج (انٹرویوٹی کوڈ ، INT رزلٹ کوڈ ، ارادے سے متعلق ڈیٹا) {super.onActivityResult (درخواست کوڈ ، رزلٹ کوڈ ، ڈیٹا)؛ اگر (نتیجہ کوڈ == RESULT_OK) {سوئچ (درخواست کوڈ) {معاملہ WRITE_STORAGE: چیک پرمیشن (درخواست کوڈ)؛ توڑ کیس SELECT_PHOTO: Uri dataUri = data.getData ()؛ سٹرنگ پاتھ = MyHelper.getPath (یہ ، ڈیٹاآوری)؛ if (path == null) {myBitmap = MyHelper.resizePhoto (تصویر ، یہ ، ڈیٹاآوری ، myImageView)؛ } else {myBitmap = MyHelper.resizePhoto (تصویر ، پاتھ ، myImageView)؛ } if (myBitmap! = null) {myTextView.setText (null)؛ myImageView.setImageBitmap (myBitmap)؛ } توڑ }}} نجی باطل رنٹیکسٹ آریکوگ () {فائر بیس ویژنآئیجیج کی تصویر = فائر بیس ویژن آئیمیج۔ فریم بٹ میپ (مائی بٹ میپ)؛ فائر بیس ویژنٹیکسٹ ڈیٹیکٹر ڈیٹیکٹر = فائر بیس ویژن.بیٹ انسٹینس (). getVisionTextDetector ()؛ ڈٹیکٹر.ڈیٹیکٹ انیجج (امیج) .ایڈ آؤن سکس لیسٹنر (نیا آن سکس لیسٹنر() {@ آوائس سائیڈ بایڈ آن آن سکیسیس (فائر بیس ویژنٹیکسٹ ٹیکسٹس) {عمل اکسٹریکٹ ٹیکسٹ (نصوص)؛ }}). addOnFailureListener (new OnFailureListener () {Override Public Void onFailure (NonLull اپنسی مستثنیٰ ہے) ast ٹوسٹ.میک ٹیکسٹ (مین سرگرمی. اس ، "استثنا" ، ٹوسٹ. ایل این جیتھ_لونگ)۔ ow؛؛}}} } نجی باطل پروسیسرٹ ٹریکٹ ٹیکسٹ (فائر بیس ویژنٹیکسٹ فائر بیس ویژن ٹیکسٹ) {مائی ٹیکسٹ ویو.سیٹ ٹیکسٹ (کالعدم)؛ اگر (فائر بیس ویژنٹیکسٹ.بیٹ بلاکس (). سائز () == 0) {مائی ٹیکسٹ ویو.سیٹ ٹیکسٹ (R.string.no_text)؛ واپسی Fire کے لئے (فائر بیس ویژنٹیکسٹ۔ بلاک بلاک: فائر بیس ویژنٹیکسٹ.بیٹ بلاکس ()) T مائی ٹیکسٹ ویو۔اپینڈ (block.getText ())؛ }}}

منصوبے کی جانچ ہو رہی ہے

اب وقت آگیا ہے کہ ایم ایل کٹ کے متن کی پہچان کو عملی شکل میں دیکھیں۔ اس پروجیکٹ کو اینڈروئیڈ ڈیوائس یا اے وی ڈی پر انسٹال کریں ، گیلری سے ایک تصویر منتخب کریں ، اور پھر "ٹیکسٹ چیک کریں" بٹن کو ایک ٹیپ دیں۔ ایپ کو شبیہہ سے تمام متن کو نکال کر ، اور پھر اسے ٹیکسٹ ویو میں ڈسپلے کرکے جواب دینا چاہئے۔

نوٹ کریں کہ آپ کی شبیہہ کی جسامت ، اور اس میں موجود متن کی مقدار پر انحصار کرتے ہوئے ، آپ کو تمام نکالے ہوئے متن کو دیکھنے کے لئے سکرول کی ضرورت پڑسکتی ہے۔

آپ مکمل پروجیکٹ کو گٹ ہب سے بھی ڈاؤن لوڈ کرسکتے ہیں۔

ختم کرو

آپ اب ایم ایل کٹ کا استعمال کرتے ہوئے ، کسی شبیہہ سے متن کا پتہ لگانے اور نکالنے کا طریقہ جانتے ہیں۔

ٹیکسٹ ریکگنیشن API ، ایم ایل کٹ کا صرف ایک حصہ ہے۔ یہ ایس ڈی کے بارکوڈ اسکیننگ ، چہرے کا پتہ لگانے ، تصویری لیبلنگ اور تاریخی شناخت کی پیش کش بھی کرتا ہے ، جس میں عام موبائل استعمال کے معاملات میں زیادہ سے زیادہ API شامل کرنے کے منصوبے شامل ہیں ، جس میں اسمارٹ جواب اور اعلی کثافت والا چہرہ سموچ API بھی شامل ہے۔

آپ کون سا ایم ایل کٹ API آزمانے میں سب سے زیادہ دلچسپی رکھتے ہیں؟ ہمیں ذیل میں تبصرے میں بتائیں!

اگر آپ کم از کم $ 50 مالیت کے ایمیزون گفٹ کارڈ خریدتے ہیں تو ایک محدود وقت کے لئے ، ایمیزون آپ کو مفت کریڈٹ دیتا ہے۔ تھوڑا سا عمدہ پرنٹ ہے ، لیکن اگر آپ اپنی بے لوثی کے ل ome کچھ مفت رقم چاہتے ہیں تو ...

آپ کے موبائل آلہ کے ل a مختلف قسم کے پیریفرلز کی پیش کش کرتے ہوئے ، عنکر وہاں پر مشہور آلات بنانے والوں میں سے ایک ہے۔ خوش قسمتی سے ، اینکر چارج کرنے کے لئے مختلف لوازمات اب ایمیزون کے ذریعے رعایتی قی...

اشاعتیں