কোড 39 বারকোড স্ক্যানার


10

কোড 39 , 1974 সালে বিকাশযুক্ত, বারকোডগুলির মধ্যে সর্বাধিক ব্যবহৃত প্রতীক, বা প্রকারগুলির মধ্যে একটি, যদিও এটি ইউপিসি / ইএন সিস্টেম যা প্রায়শই খুচরা বিক্রয়গুলিতে দেখা যায়। কোড 39 বারকোড বড় হাতের অক্ষর, সংখ্যা এবং কিছু প্রতীক এনকোড করতে পারে এবং একটি বিশেষ ফন্ট ব্যবহার করে কম্পিউটার সফ্টওয়্যার থেকে মুদ্রণের জন্য তুচ্ছ। এটি তাদের ব্যাপক বাণিজ্যিক এবং শিল্প ব্যবহারের দিকে পরিচালিত করে (উদাঃ সংস্থা আইডি ব্যাজ, সম্পদ ট্র্যাকিং, কারখানা অটোমেশন)।

512x512 পিক্সেল গ্রেস্কেল চিত্র থেকে যে কোনও ওরিয়েন্টেশনে কোড 39 বারকোড পড়ার জন্য সংক্ষিপ্ততম প্রোগ্রাম বা ফাংশন তৈরি করুন; বারকোড অনুভূমিকভাবে বা উলম্বভাবে সারিবদ্ধ নাও হতে পারে।

  • আপনার প্রোগ্রামকে অবশ্যই একটি মানক চিত্র ফাইল ফর্ম্যাটটি গ্রহণ করতে হবে এবং বারকোডে এনকোড করা ডেটাটিকে তার স্ট্যান্ডার্ড আউটপুট বা রিটার্ন মান হিসাবে (কোনও শুরু / স্টপ অক্ষর সহ নয়) উত্পাদন করতে হবে।
  • কোনও চিত্রের মধ্যে একাধিক বৈধ কোড 39 বারকোড নেই, এবং কোনও বারকোড কোনও স্থান অক্ষরকে এনকোড করে না (ASCII 32)।
  • যদি কোনও বৈধ কোড 39 বারকোড চিত্রটিতে না দেখানো হয় তবে প্রোগ্রামটিকে অবশ্যই একটি একক প্রশ্ন চিহ্ন ( ?) আউটপুট করতে হবে ।

আমি জাভাস্ক্রিপ্ট রেফারেন্স বাস্তবায়ন এবং বৈধ বারকোড সহ এবং উভয় ছাড়াই পিএনজি ফর্ম্যাটে চিত্রগুলির টেস্ট স্যুট প্রস্তুত করেছি । রেফারেন্স বাস্তবায়ন, যা সর্বাধিক সাম্প্রতিক ওয়েব ব্রাউজারগুলিতে 46 টির মধ্যে কেবলমাত্র 3 টি ক্ষেত্রে ব্যর্থ হয়, এটি একটি সম্ভাব্য ডিকোডিং অ্যালগরিদম দেখানোর উদ্দেশ্যে, উপরের স্পেসিফিকেশনের সাথে কঠোরভাবে মেনে চলতে হবে না।

একটি বৈধ জমা এই পরীক্ষাগুলির কমপক্ষে 80% (37/46) পাস করে এবং যথাযথ দ্রুত সিপিইউতে (যেমন 2.6 গিগাহার্টজ কোয়াড কোর) প্রতিটি চিত্রের জন্য এটি করতে এক মিনিটের বেশি সময় নেয় না। আমার রেফারেন্স বাস্তবায়ন 10% সেকেন্ডের মধ্যে প্রতিটি চিত্রের 93% পরীক্ষা করে প্রক্রিয়া করে (আমার ডেস্কটপ পিসিতে গুগল ক্রোম চলছে)।

(এই প্রশ্নটি মেতে 28 মে, 2011 এ প্রস্তাব করা হয়েছিল ।)


আপনার বারকোড জেনারেটরে একটি বাগ রয়েছে বলে মনে হচ্ছে - এটি সংকীর্ণটির পরিবর্তে অক্ষরের মধ্যে একটি বিস্তৃত স্থান রাখে।
কিথ র্যান্ডাল

@ কিথ: আন্তঃআরক্ষকের ফাঁক (I) একটি সরু বারের (X) এর প্রস্থের সমান হতে হবে না, যদিও এটি প্রায়শই থাকে। বৈধ জমাগুলি বারকোডগুলি পড়তে সক্ষম হবে যেখানে আমি 3 এক্স। আমার পরীক্ষার কেস জেনারেটর ইচ্ছাকৃতভাবে আন্তঃসারকের ফাঁকটি এলোমেলো করে। adams1.com/39code.html
দয়া করে

1X এবং 3X এর মধ্যে অ্যান্টারচার্যাক্টরের ব্যবধান সহ একটি কোড 39 বারকোড বেশিরভাগ সাধারণ স্ক্যানার দ্বারা পড়া যায়? আমি এটির সাক্ষ্য দিচ্ছি এবং দেখছি এটি এইভাবে কাজ করে কিনা যাইহোক, আমার দৃষ্টিতে, ইন্টারগ্যাপ কেবল কোড 39 প্রিন্টআউট আকারকে প্রসারিত করতে পারে, তবে কেন আমরা এর আন্তঃসারকের ব্যবধানটি প্রসারিত করব?

উত্তর:


5

পাইথন, 899 টি অক্ষর

import sys,random
raw_input()
X,Y=map(int,raw_input().split())
input()
I=[' x'[v<'~']for v in sys.stdin.read()]
M={196:' ',168:'$',148:'*',388:'.',52:'0',97:'2',49:'4',112:'6',292:'8',73:'B',25:'D',88:'F',268:'H',28:'J',67:'L',19:'N',82:'P',262:'R',22:'T',193:'V',145:'X',208:\
'Z',42:'%',138:'+',133:'-',162:'/',289:'1',352:'3',304:'5',37:'7',100:'9',265:'A',328:'C',280:'E',13:'G',76:'I',259:'K',322:'M',274:'O',7:'Q',70:'S',385:'U',448:'W'\
,400:'Y'}
N=500
for w in' '*30000:
 a,b,c,d=eval('random.random(),'*4);A=''.join(I[int((a+(c-a)*i/N)*X)+X*int((b+(d-b)*i/N)*Y)]for i in range(N)).lstrip();T=A.count(' x')+1;K=A.count('x')/T;L=A.count\
(' ')/T;s='';z=c=0
 while A:
  z*=2;y=A.find(' ')
  if y<0:y=len(A)
  z+=y>K;A=A[y:]
  z*=2;y=A.find('x')
  if y<0:y=len(A)
  z+=y>L;A=A[y:];c+=2
  if c>9:
   if z/2in M:s+=M[z/2];z=c=0
   else:break
 if s and'*'==s[0]and'*'==s[-1]and'*'!=s:print s[1:-1];break

এই কোডটি একটি পিএনএম ফর্ম্যাট চিত্রটি ইনপুট হিসাবে নেয় , তাই আমি সাধারণত এটিকে চালিত করি:

pngtopnm s01.png | ./barcode.py

কোডটি নিজেই প্রচুর এলোমেলো স্ক্যানলাইনগুলি বেছে নিয়েছে এবং সেই স্ক্যানলাইনে কালো এবং সাদা রানগুলির সাথে কোড 39 নিদর্শনগুলিতে মিলানোর চেষ্টা করে। এটি এলোমেলোভাবে তৈরি করা হয়েছে যাতে এটি উপলক্ষে বারকোডগুলি খুঁজতে ব্যর্থ হতে পারে। (আমি পরীক্ষার চিত্রগুলিতে প্রায় 20% মিথ্যা নেতিবাচক ব্যর্থতার হার পাই)) এটি ব্যর্থ হলে এটি চালাতে প্রায় এক মিনিট সময় নেয়, যখন এটি সাফল্য পায় তখন প্রায়শই তার চেয়ে দ্রুত হয়। আমি কখনও একটি মিথ্যা ইতিবাচক দেখিনি।


M=dict(zip('UK.-RQA+HGYXON*TEDJ1/87$%540WVML SCBIZPF3296',[385,259,...]))
ugoren
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.