গণিত, কোনও মডুলো নেই!
n = 14627;
length = Ceiling[Log[10, n]];
img = Rasterize[n, RasterSize -> 400, ImageSize -> 400];
box = Rasterize[n, "BoundingBox", RasterSize -> 400, ImageSize -> 400];
width = box[[1]]; height = box[[3]];
ToExpression[
TextRecognize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/length &, {width - width/length, width},
length - 1]]]]
আসুন এটি ভেঙে দিন।
সংখ্যায় কয়টি সংখ্যা রয়েছে তা জানতে প্রথমে আমরা কিছু "ক্রিয়েটিভ পাটিগণিত" ব্যবহার করি: length = Ceiling[Log[10, n]];
এরপরে, আমরা একটি দুর্দান্ত বড় ছবিতে নম্বরটি রাস্টারাইজ করব:
এখন আমরা সেই চিত্রটির বাউন্ডিং বাক্সটির জন্য অনুসন্ধান করি এবং প্রস্থ এবং উচ্চতা (চিত্রটি উচ্চতার পরিবর্তে বেসলাইন অফসেটটি ব্যবহার করি কারণ এমএম চিত্রের বেসলাইনের নীচে কিছু সাদা অংশ যোগ করে) ites
এর পরে, নেস্টলিস্ট চিত্রটির প্রান্ত থেকে অক্ষরগুলি একের পর এক আঁকতে সক্ষম করার জন্য স্ট্রিংয়ের দৈর্ঘ্য দ্বারা বিভক্ত চিত্রটির প্রস্থকে পুনরাবৃত্তভাবে বিয়োগ করে এবং সেগুলি এই চিত্রটিতে পুনরায় জমা দেওয়া হয়:
তারপরে আমরা এটি অপটিক্যাল চরিত্রের স্বীকৃতির জন্য পাঠ্য সনাক্তকরণ ফাংশনে পৌঁছে দেব যা এই চিত্রের আকার এবং রাস্টারাইজেশন মানের অনবদ্যভাবে চূড়ান্ত আউটপুট সনাক্ত করতে এবং আমাদের পূর্ণসংখ্যা দিতে সক্ষম:
72641
লোগারিদম এবং ওসিআর - এটি চকোলেট এবং চিনাবাদাম মাখনের মতো!
নতুন এবং উন্নত
এই সংস্করণটি অল্প সংখ্যার সাথে পাঠ্য সনাক্তকরণের বাধা আচরণের সাথে সংখ্যার প্যাড আউট করে এবং এরপরে প্যাডটি বিয়োগ করে। এটি একক-সংখ্যা সংখ্যার জন্যও কাজ করে!
তবে, আপনি কেন একটি সংখ্যায় বিপরীত রুটিন চালাবেন তা আমার কাছে রহস্য। তবে কেবল সম্পূর্ণতার খাতিরে, আমি এমনকি এটি শূন্য এবং একের ইনপুটগুলির জন্যও কাজ করেছি, যা সাধারণত ভেঙে যায় কারণ মেঝে লগ তাদের জন্য 1 ফেরত না।
n = 1;
pad = 94949;
length = If[n == 1 || n == 0, 1, Ceiling[Log[10, n]]];
img = Rasterize[n + (pad*10^length), RasterSize -> 400,
ImageSize -> 400];
padlength = length + 5;
box = ImageDimensions[img];
width = box[[1]]; height = box[[2]];
reversed =
ImageResize[
ImageAssemble[
ImageTake[img, {1, height}, #] & /@
NestList[# - width/padlength &, {width + 1 - width/padlength,
width}, padlength - 1]], 200];
recognized = ToExpression[TextRecognize[reversed]];
(recognized - pad)/10^5