import sys,os,json,pickle,csv,unicodedata,numpy as np,cv2,glob sys.path.insert(0,'code'); from ocr import VisionOcr S=os.path.dirname(__file__) def norm(s): s=unicodedata.normalize('NFKC',s).upper() tr=str.maketrans('ッャュョァィゥェォヮヵヶユ','ツヤユヨアイウエオワカケユ'); s=s.translate(tr) s=s.replace('キユーピー','キユピ').replace('キューピー','キユピ') return ''.join(ch for ch in s if ch.isalnum() or ch=='%') def grams(s): return {s[i:i+2] for i in range(len(s)-1)} def sim(a,b): A,B=grams(norm(a)),grams(norm(b)) return len(A&B)/max(1,len(A)) if A else 0.0 # share of OCR bigrams explained by signature # leak-free signatures: catalog names (all SKUs) + OCR of enrolled packshots names={r['SKU_ID']:r['product_name'] for r in csv.DictReader(open('stock-lopia/stock.csv'))} if __name__=='__main__': o=VisionOcr(languages=['ja-JP','en-US']); sig={} for k,n in names.items(): sig[k]=n p=f'stock-lopia-clean/{k}.jpg' if os.path.exists(p): sig[k]+=' '+' '.join(l.text for l in o.read(cv2.imread(p)).lines) for k,v in sig.items(): print(k, v[:90]) pickle.dump(sig,open(f'{S}/sig.pkl','wb'))