3

スクリーンショットで OCR 認識を作成しようとしています。(クリックしたデスクトップの領域の) スクリーンショットを撮った後、pibxbufferに移動し、そのコンテンツはpytesseractに移動します。しかし、pixbuffer を使用した後は画質が悪くなります。つまり、歪んでいます (pixbuffer ではなく、ディレクトリに保存しようとして、調べました)。

def takeScreenshot(self, x, y, width = 150, height = 30): 
    self.width=width 
    self.height=height 
    window = Gdk.get_default_root_window() 
    #x, y, width, height = window.get_geometry() 

    #print("The size of the root window is {} x {}".format(width, height)) 

    # get_from_drawable() was deprecated. See: 
    # https://developer.gnome.org/gtk3/stable/ch24s02.html#id-1.6.3.4.7 
    pixbufObj = Gdk.pixbuf_get_from_window(window, x, y, width, height) 
    height = pixbufObj.get_height() 
    width = pixbufObj.get_width() 
    image = Image.frombuffer("RGB", (width, height), 
                             pixbufObj.get_pixels(), 'raw', 'RGB', 0, 1) 
    image = image.resize((width*20,height*20), Image.ANTIALIAS) 
    #image.save("saved.png") 
    print(pytesseract.image_to_string(image)) 

    print("takenScreenshot:",x,y) 

画像をディレクトリに保存したところ、問題なく (品質)、認識も良好でした。
なしで試してみImage.ANTIALIASました-違いはありません。

(20倍拡大の目的:ディレクトリに保存された画像を認識させるコードを試してみましたが、拡大縮小せずに認識品質が悪かったです。)

悪い絵

問題は、画像が歪んでいることです。

4

2 に答える 2

2

このような極端なスケーリングは、特にフルカラーや特別な処理 (アンチエイリアシング) を使用する OCR では一般的に不適切です。

私は...するだろう:

  • あまりアップスケールしない (なし?)、または NEAREST を使用する
  • 読み込み直後にグレースケールに変換します (表示されるアーティファクトを回避するため):

    image = image.convert('L')
    
于 2015-12-16T20:08:21.773 に答える