Category: Python
-
Python Libs – Why “profile” can’t be context manager?
Why Python standard library “profile” can’t be context manager like this import profile with profile.Profile(): fib(10) Zero, what is “profile” module in Python? According to Python 3 Documentation: profile, a pure Python module whose interface is imitated by cProfile, but which adds significant overhead to profiled programs. If you’re trying to extend the profiler…
-
bpo-29901: Improve support of path-like objects in zipapp 分析
bpo-29901 簡介 Title: Support path-like objects in zipapp Create By: Serhiy Storchaka Solved By: Serhiy Storchaka BPO: http://bugs.python.org/issue29901 PR815: https://github.com/python/cpython/pull/815 Components: Library (Lib) Versions: Python 3.7 Stage: resolved Type: enhancement 新知 os.PathLike: https://docs.python.org/3/library/os.html#os.PathLike path-like object: https://docs.python.org/3.7/glossary.html#term-path-like-object Lib/zipapp (from version 3.5): https://docs.python.org/3/library/zipapp.html Lib/pathlib (from version 3.4): https://docs.python.org/3/library/pathlib.html 技巧 isinstance 的 classinfo 可以傳入 tuple diff –git a/Lib/zipapp.py b/Lib/zipapp.py index eceb91de1a..c23b788d1c 100644 — a/Lib/zipapp.py +++ b/Lib/zipapp.py @@ -36,9 +36,7…
-
pylivecap – 擷取 YouTube 直播影片 frame 並且存成圖片
pylivecap 是一個用來擷取直播中影片的 frame,並且存成圖片的 Python package。解決目前沒有「只擷取直播目前畫面」程式的狀況。 目前的作法是透過 streamlink 獲得畫面,傳到 ffmpeg 解出一個 frame 來,透過 Python 整理成單一的 API 來使用。主要架構非常簡單,就是下面這樣: def capture(url, output, quality=VideoQuality.BEST): livestream = [ ‘streamlink’, ‘-O’, url, quality.value ] ffmpeg = [ ‘ffmpeg’, ‘-y’, # Force overwrite ‘-i’, ‘-‘, ‘-f’, ‘image2’, ‘-vframes’, ‘1’, output ] p1 = subprocess.Popen(livestream, stderr=subprocess.DEVNULL, stdout=subprocess.PIPE) p2 = subprocess.Popen(ffmpeg, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=p1.stdout) p1.stdout.close() p2.communicate() 這邊很可恥的用了…
-
Google Cloud Vision API 與 tesseract-ocr 做中文文字辨識比較
目前 Google Cloud Vision API 的報價如下,相對於一年前開放的時候價格有下降 40 %,一年前的報價可以參考:gslin – Google Cloud Vision API 開放讓大眾使用。 拿 Google Cloud Vision API 與 tesseract-ocr 相對比,Vision API 明顯大勝。 比較基準: tesseract 3.04.01, github 之官方 chi_tra traineddata Google Cloud Vision API – 2017/02/16 OCR 比較圖 1 – 強悍!中華備戰經典賽 澳洲移訓”火力猛” tesseract: 強悍! 中華傭戰鰹興賽˙澳洲′移訓”火丙弩孟” Vision api: 強悍!中華備戰經翼賽 漢洲移訓”火ガ罡 OCR 比較圖 2 – 機捷試乘 機捷開放民眾試乘 預辦登機同步試辦…
-
Python C Extension package version 設定
不論是 setuptools 或是 distutils 都無法直接設定 C Extension package 的 version,必須採用紆迴的方式進行。 總而言之,Python 3.6 的年代,我們直接使用 setuptools。 0. 預期結果 >>> import jchash >>> jchash.__version__ ‘1.0’ 1.原始狀況 原始 Init function: PyMODINIT_FUNC PyInit_jchash(void) { return PyModule_Create(&module); } 原始 setup.py PACKAGE_VERSION = ‘1.0’ jchash = Extension(PACKAGE_NAME, define_macros=[ (‘PACKAGE_VERSION’, PACKAGE_VERSION)], sources=[‘src/jchash.c’]) 只有這樣是不夠的,Extension 的 define_macros 是在編譯時會加上 -DPACKAGE_VERSION=1.0 這樣的 flag,可是不會幫你轉換成為 package 的 version。 2.改用 PyModule_AddStringConstant 參考資料:PyModule_AddStringConstant…
-
使用 C 來編寫 Python 模組 – 以 jump consistent hash 為例
Extending Python with C – Jump Consistent Hash 本文的目標是以 C 完成 Jump Consistent Hash 的主體,接著透過 Python-C-API 轉為 Python 可以使用的套件。也就是說,模組的本體將會以 C 語言寫成,接著透過 setuptools 編譯為 so 檔,如此編成的模組將可以讓 Python 無縫接軌使用。 參考文章與程式原始碼: A Fast, Minimal Memory, Consistent Hash Algorithm: https://arxiv.org/pdf/1406.2294v1.pdf Python c-api: https://docs.python.org/3/c-api/intro.html Extending Python with C or C++: https://docs.python.org/3/extending/extending.html jchash – Jump Consistent Hash for Python: https://github.com/grapherd/jchash 1.我們的目標 閱讀完 <A Fast, Minimal Memory, Consistent…