前提・実現したいこと
camelotのimage_processing.pyのadaptive_thresholdを変更して自作の処理を追加したいのですが
ライブラリの処理を変更したい場合はどのようにすればよろしいのでしょうか教えてください
よろしくお願いいたします。
image_processing.pyのadaptive_thresholdを書き換え下記のソースコードの処理に変更したい
https://github.com/camelot-dev/camelot/blob/420d5aa6242fc19100f285de5a1d4781d1cd6254/camelot/image_processing.py#L7
adaptive_thresholdの呼び出し側
https://github.com/camelot-dev/camelot/blob/420d5aa6242fc19100f285de5a1d4781d1cd6254/camelot/parsers/lattice.py#L27
発生している問題・エラーメッセージ
該当のソースコード
python
1import camelot 2 3# パッチ 4 5def my_method(imagename, process_background=False, blocksize=15, c=-2): 6 7 print("処理") 8 9 img = cv2.imread(imagename) 10 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 11 12 if process_background: 13 threshold = cv2.adaptiveThreshold( 14 gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blocksize, c 15 ) 16 else: 17 threshold = cv2.adaptiveThreshold( 18 np.invert(gray), 19 255, 20 cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 21 cv2.THRESH_BINARY, 22 blocksize, 23 c, 24 ) 25 return img, threshold 26 27# ライブラリを直接変更せずにパッチ摘要できる方法があれば 28 29tables = camelot.read_pdf("data.pdf", pages="all", split_text=True)
試したこと
Pythonでライブラリの処理を上書きする
https://qiita.com/Asayu123/items/8d8da9911dd0c3296a81
python
1# パターン1 2camelot.image_processing.adaptive_threshold = my_method 3camelot.image_processing.adaptive_threshold("data.png") 4 5# パターン2 6camelot.adaptive_threshold = my_method 7camelot.adaptive_threshold("data.png")
両方を試してみましたが直接呼び出す場合は変更されているのですが
python
1tables = camelot.read_pdf("data.pdf", pages="all", split_text=True)
のように内部で呼び出される場合は変更されていません
追記
- image_processing.pyを書き換え
を直接変更後に「import camelot」は成功
- lattice.pyを書き換え
パッチを追加後
「adaptive_threshold = my_threshold」
で「import camelot」は成功しました
ライブラリを直接変更せずにパッチを適用することはできないのでしょうか?
補足情報(FW/ツールのバージョンなど)
Python 3.8.6
Google Colaboratry
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/02 12:12
2020/11/02 12:45