Tantangan Data Dunia & AI: Memulai Pengenalan Braille

Teknologi kecerdasan buatan dan analisis data semakin cepat memasuki kehidupan kita; mereka dapat memberikan kesempatan lain untuk menyelesaikan masalah sosial yang sangat penting bagi orang-orang yang belum pernah diterapkan sebelumnya. Untuk tujuan ini, pusat pengembangan digital ASI menyelenggarakan kompetisi World AI & Data Challenge , yang bertujuan untuk menyusun proses pencarian masalah sosial dan solusinya. Pada Februari 2020, tim ASI Digital Development Center mengundang saya untuk mengikuti para pakar kompetisi ini. Dalam posting ini saya akan memberi tahu Anda sedikit tentang kompetisi itu sendiri, serta bagaimana Anda dapat mulai menyelesaikan salah satu tugas menarik dari kompetisi ini - pengenalan Braille . Anda dapat berpartisipasi dalam menyelesaikan ini dan tugas kompetisi lainnya hingga 31 Agustus 2020.





Tentang persaingan



, . .



, , . , , . 147 43 , , , . 30 30 , 8 — .



, . 2 . : - , - - , . . — http://git.asi.ru 31 2020 ..



( — 2021 .), . . .



, 1,5 . , 1 Data Science -.





. , , , .



, :



  • ,
  • ,


— , .





, , . , 2017 , GitHub, , — Python ( , , - ). , , . !



, . : Smart Braille System Recognizer (2013), Optical Braille Recognition Based on Semantic Segmentation Network.



, . - , tutorial





, , . , :



Huruf braille cyryllic



, .



, , - :



  • [ Kaggle][KaggleData], , , . .
  • GitHub , , data augmentation.
  • , . , , .. , , ..


Huruf cyrillic Braille





, :



  1. /
  2. , ( )
  3. ,
  4. . , , spell checker, , Microsoft.


. , , GitHub https://github.com/shwars/braillehack. — fork! Visual Studio Codespaces





OpenCV. , - :



im = cv2.imread('../data/Photo_Turlom_C1_2.jpeg')
im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)




, . , , . : — .



, :



im = cv2.blur(im,(3,3))
im = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                           cv2.THRESH_BINARY_INV, 5, 4)
im = cv2.medianBlur(im, 3)
_,im = cv2.threshold(im, 0, 255, cv2.THRESH_OTSU)
im = cv2.GaussianBlur(im, (3,3), 0)
_,im = cv2.threshold(im, 0, 255, cv2.THRESH_OTSU)
plt.imshow(im)


:







, , .



.



. feature detectors, OpenCV ORB, :



orb = cv2.ORB_create(5000)
f,d = orb.detectAndCompute(im,None)


5000 — , . , :



def plot_dots(im,dots):
    img = np.zeros_like(im)
    for x in dots:
        cv2.circle(img,(int(x[0]),int(x[1])),1,(255,0,0))
    plt.imshow(img)

pts = [x.pt for x in f]
plot_dots(cim,pts)  






, :



  • . , . , , .
  • .


feature detector , .

: OR- , . , — , .



, ! , - !





, , , ( ) . , . , , . "" , , :



min_x, min_y, max_x, max_y = \
   [int(f([z[i] for z in pts])) 
       for f in (min,max) for i in (0,1)]


(, 500):



off = 5
src_pts = np.array([(min_x-off,min_y-off),(min_x-off,max_y+off),
                    (max_x+off,min_y-off),(max_x+off,max_y+off)])
dim = 500
dst_pts = np.array([(0,0),(0,dim),(dim,0),(dim,dim)])
h,m = cv2.findHomography(src_pts,dst_pts)
trim = cv2.warpPerspective(cim,h,(dim,dim))
plt.imshow(trim)




.





, , .



char_h = 32
char_w = 22
def slice(img):
    dy,dx = img.shape
    y = 0
    while y+char_h<dy:
        x=0
        while x+char_w<dx:
            #    x
            while np.max(img[y:y+char_h,x])!=0:
                x+=1
            while np.max(img[y:y+char_h,x+char_w])!=0:
                x-=1
            #    
            if np.max(img[y:y+char_h,x:x+char_w])>0:
                yield img[y:y+char_h,x:x+char_w]
            x+=char_w
        y+=char_h

sliced = list(slice(trim))


. - , , "" . , - , x. .



, :







, , MNIST, , :



  • Keras/Tensorflow —
  • , PyTorch — , .




, . - , . , - , .



, . , , , . ,

Microsoft, REST-. MVP .





( Python), . , , . (MVP), Microsoft Azure .



:





Python , REST-. -API, . API Azure Function HTTP-.



Azure Function — - ( Python), - ( — REST-). , Python — .



- . !





, , , MVP-. , , .



, , http://github.com/shwars/braillehack. , , " " — , . , - — , http://soshnikov.com.



! , - , , , - .




All Articles