بلاگی در مورد دیجیتال و پردازش تصویرو برنامه نویسی

طبقه بندی موضوعی

Prerequisites

NVidia Driver, Cuda Toolkit 7.5, cuDNN v5 or v5.1, Anaconda2-4.0.0 64bit or Anaconda2-4.2.0 64bit and OpenCV 3.1 (using conda installation) should be installed and configed following previous documents.

Install General Dependencies

# yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
# yum install gflags-devel glog-devel lmdb-devel
# yum install openblas-devel

Download Caffe

Go to this page https://github.com/BVLC/caffe. Download the latest version.

Tested Version: 2c34393fc5aec9899d92c64be41598a3184d3347 (20160928) . This version is a refined version based on release candidate 3. Link: https://github.com/BVLC/caffe/archive/2c34393fc5aec9899d92c64be41598a3184d3347.zip

Download the file to /opt/ml-items, unzip it.

# wget https://github.com/BVLC/caffe/archive/2c34393fc5aec9899d92c64be41598a3184d3347.zip
# unzip 2c34393fc5aec9899d92c64be41598a3184d3347.zip
# mv caffe-2c34393fc5aec9899d92c64be41598a3184d3347 caffe-2c34393

Config Makefile

# cd caffe-2c34393
# cp Makefile.config.example Makefile.config
# vi Makefile.config

If you do not want to change it one by one, a modified version of mine can be used. The steps for changing it are provided.

^^^^^^ Items for Change

User cuDNN

uncomment

USE_CUDNN := 1 

Use OpenCV version 3

uncomment

OPENCV_VERSION := 3

Use OpenBLAS

change

BLAS := atlas

to

BLAS := open

uncomment

BLAS\_INCLUDE

and change it to

BLAS_INCLUDE := /usr/include/openblas

uncomment

BLAS_LIB

and change it to B

LAS_LIB := /usr/lib64

Replace Default Path with Anaconda Path

comment

PYTHON_INCLUDE := /usr/include/python2.7/usr/lib/python2.7/dist-packages/numpy/core/include

uncomment

ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE

change it into

ANACONDA_HOME := /opt/anaconda2

comment

PYTHON_LIB := /usr/lib

uncomment

PYTHON_LIB := $(ANACONDA_HOME)/lib

uncomment

WITH_PYTHON_LAYER := 1

Add 64 bit Library Path

add

/usr/lib64

to the end of LIBRARY_DIRS

^^^^^^ End Items for Change

Compilation

Link OpenCV Libs

Since we install OpenCV using Anaconda, the path of OpenCV libraries are a little different with the normal installation. Link operations should be used.

# cd /usr/lib64
# ln -s /opt/anaconda2/lib/libhdf5.so.10 libhdf5.so.10
# ln -s /opt/anaconda2/lib/libhdf5_hl.so.10 libhdf5_hl.so.10
# ln -s /opt/anaconda2/lib/libopencv_core.so.3.1 libopencv_core.so.3.1
# ln -s /opt/anaconda2/lib/libopencv_highgui.so.3.1 libopencv_highgui.so.3.1
# ln -s /opt/anaconda2/lib/libopencv_imgproc.so.3.1 libopencv_imgproc.so.3.1
# ln -s /opt/anaconda2/lib/libopencv_imgcodecs.so.3.1 libopencv_imgcodecs.so.3.1
# ldconfig

Compile Caffe by multithread. For example, -j8 use 8 threads. (A good choice for the number of threads is the number of cores in your machine)

# make all -j8
# make test -j8
# make runtest -j8

For the last command, it should show PASSED at the end.

Run Samples (Check Points)

Download and create MNIST database

# ./data/mnist/get_mnist.sh
# ./examples/mnist/create_mnist.sh

Run it. With a Titan X, the following script should be finished within 25 seconds.

# ./examples/mnist/train_lenet.sh

Python Interface

Comoplie the Python interface.

# make pycaffe -j8

Install dependency module in Python

# conda install protobuf
# conda install -c https://conda.binstar.org/dougal lmdb

Add Caffe module directory to PYTHONPATH

# vi /etc/profile

Add the following line to the end of /etc/profile

export PYTHONPATH=$PYTHONPATH:/opt/ml-items/caffe-2c34393/python:

Refresh

# source /etc/profile

Check Points

# python

>> import caffe

It should be no error.

Copy mnist_example.py to /opt/ml-items/caffe-2c34393/examples and run it. It should be no error.

# cd /opt/ml-items/caffe-2c34393/examples
# python mnist_example.py

end Check Points



http://www.linjialiang.net/article/view.asp?id=136

http://www.linjialiang.net/article/view.asp?id=135

  • صالح جمالی

Linux :: Shared aliases in /etc/profile.d not applied to root user, why?


I suspect that you execute the su command without dash (-), and if so, it will invoke an interactive non-login shell. Combine with you have only following in /root/.bashrc:

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
    # Shell is non-interactive.  Be done now!
    return
fi

(not source /etc/bashrc)

whereas if you directly login or use su -, it will invoke a login shell, /etc/profile is read and sharedAliases.sh will be execute.

To see which file is read with different shells, adding logs to all these files by executing the following commands as root:

echo "echo 'running /etc/bashrc'" >> /etc/bashrc
echo "echo 'running /etc/profile'" >> /etc/profile
echo "echo 'running /root/.bashrc'" >> ~/.bashrc

Create an test alias:

# echo "alias list='ls'" > /etc/profile.d/test.sh

Now, login as normal user and use su, you will see something like this:

$ su
Password: 
running /root/.bashrc
bash-3.2# list
bash: list: command not found

and with su -:

$ su -
Password: 
running /etc/profile
running /root/.bashrc
# list
total 226540
-rw-rw-r-- 1 root root     60148987 Apr  1  2011 3241948.flv


https://serverfault.com/questions/321763/linux-shared-aliases-in-etc-profile-d-not-applied-to-root-user-why
  • صالح جمالی

بعضی وقتی موقع کامپایل پروژه پیش میاد که کتابخونه فلان پیدا نشد

error while loading shared libraries: libopencv_core.so.3.2: cannot open shared object file: No such file or directory


برای بررسی دقیق تر مشکل بهتره برید به مسیر  فایل اجرایی و با دستور ldd مشخصات دقیق تری رو از کتابخونه ها استخراج کنید:

linux-vdso.so.1 =>  (0x00007ffe555e9000)

libcaffe.so.1.0.0 => /home/saleh/01_Repositories/caffe_/caffe/.build_release/tools/./../lib/libcaffe.so.1.0.0 (0x00007f9efe932000)

libcudart.so.8.0 => /usr/local/cuda-8.0/lib64/libcudart.so.8.0 (0x00007f9efe697000)

libcublas.so.8.0 => /usr/local/cuda-8.0/lib64/libcublas.so.8.0 (0x00007f9efbbff000)

libcurand.so.8.0 => /usr/local/cuda-8.0/lib64/libcurand.so.8.0 (0x00007f9ef7c89000)

libglog.so.0 => /lib64/libglog.so.0 (0x00007f9ef7a58000)

libgflags.so.2.1 => /lib64/libgflags.so.2.1 (0x00007f9ef7837000)

libprotobuf.so.8 => /lib64/libprotobuf.so.8 (0x00007f9ef7525000)

libboost_system.so.1.53.0 => /lib64/libboost_system.so.1.53.0 (0x00007f9ef7320000)

libboost_filesystem.so.1.53.0 => /lib64/libboost_filesystem.so.1.53.0 (0x00007f9ef7109000)

libhdf5_hl.so.10 => /home/saleh/00_Programs/anaconda2/lib/libhdf5_hl.so.10 (0x00007f9ef6eeb000)

libhdf5.so.10 => /home/saleh/00_Programs/anaconda2/lib/libhdf5.so.10 (0x00007f9ef6a25000)

libleveldb.so.1 => /lib64/libleveldb.so.1 (0x00007f9ef67d1000)

libsnappy.so.1 => /lib64/libsnappy.so.1 (0x00007f9ef65cb000)

liblmdb.so.0.0.0 => /lib64/liblmdb.so.0.0.0 (0x00007f9ef63b5000)

libopencv_core.so.3.2 => not found

libopencv_highgui.so.3.2 => not found

libopencv_imgproc.so.3.2 => not found

libopencv_imgcodecs.so.3.2 => not found

libboost_thread-mt.so.1.53.0 => /lib64/libboost_thread-mt.so.1.53.0 (0x00007f9ef619d000)

libboost_system-mt.so.1.53.0 => /lib64/libboost_system-mt.so.1.53.0 (0x00007f9ef5f98000)

libstdc++.so.6 => /home/saleh/00_Programs/anaconda2/lib/libstdc++.so.6 (0x00007f9ef5c82000)

libcudnn.so.6 => /usr/local/cuda-8.0/lib64/libcudnn.so.6 (0x00007f9eec720000)

libopenblas.so.0 => /lib64/libopenblas.so.0 (0x00007f9eea4c7000)

libm.so.6 => /lib64/libm.so.6 (0x00007f9eea1c5000)

libgcc_s.so.1 => /home/saleh/00_Programs/anaconda2/lib/libgcc_s.so.1 (0x00007f9ee9faf000)

libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9ee9d92000)

libc.so.6 => /lib64/libc.so.6 (0x00007f9ee99d1000)

libopencv_core.so.3.2 => not found

libopencv_highgui.so.3.2 => not found

libopencv_imgproc.so.3.2 => not found

libopencv_imgcodecs.so.3.2 => not found

libdl.so.2 => /lib64/libdl.so.2 (0x00007f9ee97cb000)

librt.so.1 => /lib64/librt.so.1 (0x00007f9ee95c2000)

libz.so.1 => /home/saleh/00_Programs/anaconda2/lib/libz.so.1 (0x00007f9ee93ac000)

/lib64/ld-linux-x86-64.so.2 (0x00007f9eff6c9000)

libgfortran.so.3 => /lib64/libgfortran.so.3 (0x00007f9ee9088000)


  • صالح جمالی

ساده ترین روش که غیر اصولیه ولی ۱۰ ثانیه ای جواب میده:


$ su

echo "chmod a+rw /dev/ttyUSB0" >> /etc/rc.d/rc.local

بعد  ctrl + D

این روش زمانی کار میکنه که مبدل usb2serial شما موقع بوت شدن به سیستم وصل باشه و بعد لاگین شدن از سیستم جدا نشه.


  • صالح جمالی

هدف این مظلب و بخش های بعدیش، ارتقای الگوریتم فعلی برنامه نوشته شده با #C که Multithread هست(مثلا به کمک ThreadPool )    به   الگوریتم توزیع شده ای* که بار پردازشی رو بین چند سیستم مجزا(مثلا بین 10 تا PC) پخش میکنه.

\!/ این نوشته و بخش های بعدیش، بیشتر عملی هست تا علمی!
یعنی هدف بررسی تئوری و توضیح علمی و ... نیست و بیشتر گزارشی از تلاش های انجام گرفته برای پیاده سازی چنین هدفیست.

در ادامه پروژه های متن باز موجود بررسی میشوند.
  • صالح جمالی

هدف: بجای IP، یه اسمی بنویسید و در نهایت اون اسم به یک IP مشخص resolve بشه


به فولدر زیر برید:

C:\Windows\System32\Drivers\etc


فایل hosts رو با نوت پد باز کنید


همونطور که معلومه # علامت کامنت هست و باید در یک سطر جدید .و بدون # ، اول IP و بعد tab و بعد string مد نظرتون رو وارد کنید


مثال:

192.168.1.60           gitlab_server


به همین سادگی!


منبع:

https://support.rackspace.com/how-to/modify-your-hosts-file/

  • صالح جمالی

درود و وقت بخیر

شاید برای شما هم پیش اومده باشه که نیاز داشته باشید به استفاده از static library ای که در زبان ++C که کلاس و آبجکت داره، نوشته شده، در زبان دیگه ای مثل C که کلاس و آبجکت رو پشتیبانی نمیکنه!

خب اینجاست که مفهوم Class Wrapping مطرح میشه.

روشی که بکمک اون، در سمت ++C ساختاری پیاده سازی میشه که از زبان C قابل استفاده باشه.


در ضمن static library در مقابل dynamic library هست. تفاوت این دو که پسوندشون به ترتیب lib و DLL هست، در زمان لود شدنشون به برنامه میزبان هست.

DLL در runtime توسط میزبان load میشه، در حالی که static library موقع بیلد شدن برنامه میزبان، ازش استفاده میشه.


  • صالح جمالی


شاید شما هم در پروژه ای که انجام میدید احساس کنید که کاربر باید این امکان رو داشته باشه که اسکریپت دلخواهش رو بتونه بدون دردسر کامپایل کردن کل firmware برای سیستم شما که منابع محدودی داره(مثلا sram ای در حد 128KByte و...)، اجرا کنه.

  • صالح جمالی

سلام!

چند روزی بود که دنبال راه اندازی ip core مربوط به 8051 روی بورد aingf2 بودم، بالاخره کار به جایی رسید که بایستی فایل هگز تولید شده توسط keil به پسوند coe تبدیل میشد که بشه اونو به عنوان init file برای rom میکرو 8051 (در xilinx ise ) تعریف کرد.


بعد کلی جستجو، نتایج به شرح زیر بود:

1. میشد از توابع متلب برای نوشتن یا خوندن فایل coe استفاده کرد، ولی مشکل این بود که bus_width=16 فرض شده بود و تغییر دادنش سخت بود.

2. برنامه MAKEXCOE هم مثل متلب 16 بیتی بود(BUS WIDTH اش)


بالاخره مجبور شدم خودم چندتا سورس کد رو تغییر بدم و نتیجه :

  • صالح جمالی

سلام!

بالاخره بعد 2 سالی که صرف طراحی pcb و لحیم کاری و کد زدن با وریلاگ شد، بالاخره پروژه به نقطه خوشایند خودش نزدیک شده.

لحظاتی که باعث میشه خستگی تمام روز ها و شب هایی که صرفش شده، جبران بشه.


AINGF اسم مجموعه ای از پروژه ها هستش که هدف نهاییشون ساخت دوربین دیجیتالی هست که تصویر زنده رو از طریق usb یا هر رابط دیگه ای(مثلا شبکه یا pci یا ieee1394) به کامپیوتر یا کامپیوتر های تک بوردی SBC منتقل کنه.

  • صالح جمالی