علی شکیبا

دفتر یادداشت دیجیتال برای هر چیز مفید!

۳ مطلب با کلمه‌ی کلیدی «python» ثبت شده است

یکی از بهترین و مجهزترین کتابخانه‌های پردازش تصویر که متن باز هم باشد، Open CV است. این کتابخانه که به زبان ++C/C نوشته شده است، دارای یک رابط برای زبان Python نیز هست که کار با آن را بسیار ساده‌تر می‌کند و البته سرعت پردازشی بالایی را نیز به نسبت بسیاری از کتابخانه‌هایی که به صورت خالص در Python نوشته شده اند، فراهم می‌کند!

اما نصب آن یک دردسر بسیار بزرگ برای من بود! اما بالاخره موفق شدم تا آن را به صورتی کامل نصب کنم (مثال‌ها به درستی اجرا می‌شدند! :) ). مراحل نصب در ذیل می‌آیند.

اما قبل از نصب، من از موتور تک‌لایو 2012 که به شیوه این پست آن را نصب کرده ام و از توزیع Anaconda Python استفاده می‌کنم که به صورت دستی و نه با استفاده از مخازن Ubuntu نصب شده اند. شاید یکی از مهمترین دلایل سخت بودن این فرایند برای من، همین دو موضوع بود! بگذریم ...

ابتدا لازم است تا به سایت رسمی OpenCV به آدرس http://opencv.org/downloads.html رفته و از آنجا نسخه مورد نظر خود را دریافت کنیم. در زمانی که این متن را می‌نویسم، نسخه 3 در مرحله Release Candidate 1 قرار داشت. من از نسخه 2.4.11 استفاده کردم!

سپس نوبت به نصب پیش‌نیازها می‌رسد. برای نصب موفق این بسته، این بسته‌ها را نصب کردم:

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev qt5-default libqt5x11* libx11-xcb1* pkg-config libxcb1-dev libxcb1 xcb

البته به احتمال خیلی زیاد، تعدادی از این بسته‌ها لازم نیستند، اما این تمام بسته‌هایی است که نصب شدند (در مراحل مختلف که خطایابی نصب انجام می‌شد) تا مثال‌ها به درستی نصب شدند.

پس از آن، فایل دانلود شده در مرحله اول را از حالت فشرده باز کرده 

unzip opencv-2.4.11.zip

و سپس پوشه‌ای برای نگهداری اطلاعات build به نام build می‌سازیم (نام پوشه اصلا مهم نیست!)

cd opencv-2.4.11
mkdir build

پس از آن به پوشه مربوطه رفته

cd build

و دستور زیر را اجرا می‌کنیم. دقت کنید که مسیر‌های مربوط به پایتون را در این دستور مطابق شرایط نصب خود تغییر دهید

cmake -D CMAKE_BUILD_TYPE=RELEASE -D PYTHON_LIBRARY=/opt/anaconda/lib/python2.7/ -D PYTHON_INCLUDE_DIR=/opt/anaconda/include/python2.7/ -D PYTHON_PACKAGES_PATH=/opt/anaconda/lib/python2.7/site-packages/ -D BUILD_EXAMPLES=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..

پس از اینکه خروجی را کنترل کرده و مطمئن شدیم همه چیز درست است (یعنی رابط پایتون نصب می‌شود :) )، آنگاه نوبت به فرایند build و سپس نصب می‌رسد

make -j 4
sudo make install

پس از آن، در فایل (ممکن است فایل وجود نداشت باشد، اگر نبود، یکی بسازید)

/etc/ld.so.conf.d/opencv.conf

آدرس

/usr/local/lib

را درج کرده و فایل را ذخیره می‌کنیم. سپس، برای پیکربندی کتابخانه‌ها دستور

sudo ldconfig

را اجرا کرده و در فایل bashrc. موارد زیر را قرار می‌دهیم

export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

با بازکردن یک کنسول جدید، یا خارج و وارد شدن مجدد به محیط کاربری، می‌توانیم از صحت نصب با مراجعه به پوشه samples در پوشه opencv-2.4.11 و اجرای موفق مثال‌ها، مطمئن شویم که نصب به درستی صورت پذیرفته است!

۰ نظر موافقین ۰ مخالفین ۰ ۰۷ خرداد ۹۴ ، ۱۷:۳۹
علی شکیبا

بسیاری از اوقات پیش می‌آید که خروجی یک بلوک کد بسیار طولانی است. به صورت طبیعی، هنگامی که پردازش به صورت دسته‌ای و در کنسول صورت می‌گیرد، چنین خروجی‌هایی معمولا در یک فایل ذخیره می‌شوند، اما در مورد IPython Notebook وضعیت کمی متفاوت است! در این وضع تمایل داریم خروجی را در ذیل بلوک کد ببینیم!

اما مشکل جایی آغاز می‌شود که خروجی بسیار طولانی است و این گونه فایل‌ها در مرورگر وب بارگذاری می‌شوند. برای من بسیار پیش آمده است که بارگذاری یک فایل منجر به هنگ و در نهایت کرش کردن مرورگر شود. به همین دلیل پاک کردن خروجی‌ها قبل از بازکردن فایل، راهکار مناسبی به نظر می‌رسد. بدین منظور کافی است در همان مسیر یک Notebook جدید را باز کرده و قطعه کد ذیل را در آن اجرا کنیم! فایلی هم نام با فایل مورد نظر که عبارت _removed به انتهای آن اضافه شده است، در همان مسیر تولید شده که شامل محتویات فایل مزبور منهای خروجی ها است. این راهکار از اینجا برداشته شده است.

import sys
import io
import os
from IPython.nbformat.current import read, write
def remove_outputs(nb):
"""remove the outputs from a notebook"""
for ws in nb.worksheets:
for cell in ws.cells:
if cell.cell_type == 'code':
cell.outputs = []

fname = "اسم فایل مورد نظر.ipynb"
with io.open(fname, 'r') as f:
nb = read(f, 'json')
remove_outputs(nb)
base, ext = os.path.splitext(fname)
new_ipynb = "%s_removed%s" % (base, ext)
with io.open(new_ipynb, 'w', encoding='utf8') as f:
write(nb, f, 'json')
print "wrote %s" % new_ipynb
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ فروردين ۹۴ ، ۲۲:۳۲
علی شکیبا

یکی از امکانات جالبی که در Windows داشتم، این بود که با انتخاب چند فایل ویدیویی، جمع زمان آن فایل‌ها را نمایش می‌داد، اما در لینوکس این‌گونه نبود! به همین خاطر دست به کار شدم و یک اسکریپت به صورت زیر نوشتم

find . -iname "*.mp4" -exec mplayer -vo null -ao null -frames 0 -identify -msglevel all=0 {} \; | grep ^ID_LENGTH | python -c "import sys; print sum(float(l.split('=')[1])/60.0 for l in sys.stdin), ' minutes.'"

البته اگر پایتون نداشته باشیم، این دستورات bash مجموع زمان فیلم‌ها را به واحد ثانیه نشان می‌دهد

find . -iname "*.mp4" -exec mplayer -vo null -ao null -frames 0 -identify -msglevel all=0 {} \; | grep ^ID_LENGTH | tr -d "ID_LENGTH=" | paste -s -d+ | bc
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۹۴ ، ۲۳:۵۵
علی شکیبا