TensorFlow与消息队列–服务器

消息队列(Message Queue,简称 MQ),可以将一些费时的任务放入队列,慢慢处理,改善客户端的体验。与TensorFlow服务结合,可以调高服务器的计算能力,将费时的数据传输与相对较快的预测计算分开来

一.数据流图

说明:
应用场景是收集客户端中的图片,进行分类处理,结果保留到服务器与数据库。客户端不需要实时知道图片的分类结果。如果客户端要知道实时结果,就不能这样设计。
该设计主要解决了2个问题,第一 加快了客户端上传图片的速度;第二 将图像预测的工作分离了出来,单独在GPU上运行,实现最大的效率。
详细流程:
1.客户端将图片通过HTTP协议post到“生产者”
2.“生产者”将收到的图片与其他信息打包发个消息队列
3.“消费者”拿到消息后,先解包,再进行图片预处理,随后将图片张量(数值)发个tensorflow搭建的服务进行分类。
4“消费者”收到结果后,保存结果数据。

继续阅读

opencv + tensorflow + C++ 对RSNet模型进行预测

本文介绍了一种使用opencv + c++ 可以在生产环境下调用tensorflow pb文件进行预测的方法。
该方法不需要在生产环境下搭建python运行环境。 流程上相对简单清晰。如果要将神经网络/机器学习添加到几年前项目中,也比较简单可行。

一.pb文件的生成

本人使用的RsNet模型完全参考github上官方给出的demo训练生成。网址https://github.com/tensorflow/models
训练入口文件official/resnet/imagenet_main.py (主线版本 v1.8.1)
只定义了2个分类,具体的训练方法就不再累

训练完成后会在根目录生成一个imagenet_model文件夹,里面存储了模型文件(ckpt文件)。接下来需要将模型文件固化成pb文件。为了让opencv可以使用这个pb文件,需要定义好神经网络input入口与output出口

继续阅读

Centos7 + Flask + uwsgi + nginx 部署 TensorFlow

本文介绍了一个采用Flask + uwsgi + nginx 部署TensorFlow应用的方法。以此可以搭建一个简单的机器学习云服务器

一. 创建虚拟环境

由于本人安装的电脑带有显卡,所以安装了2个版本的tensorflow,一个带gpu,一个不带gpu。不同版本的tensorflow使用虚拟环境进行分割

pip install virtualenv
mkdir tf_gpu
virtualenv tf_gpu –system-site-packages
mkdir tf_cpu
virtualenv tf_cpu –system-site-packages
注:添加 –system-site-packages 是将系统site-packages里的包 包含进去; 虚拟目录的位置按需设

二.tensorflow安装

tensorflow的安装可以参考官网上的连接通过pip安装或者自己编译

https://www.tensorflow.org/install/pip 或 https://www.tensorflow.org/install/source

继续阅读

Matrox Imaging Libray Standard模式拍照方法– VA-29MC-M5

使用该拍照方法 相机无需连接触发信号线 只需要camera link线就可以实现standard拍照模式

1.相机设置

触发模式设置为 Standard

Exposure设置为 Pulse Width

Source设置为 CC1

2.DCF配置文件

Continuous_VN-29M5(80MHz)_10bit_12bit_2tap_Top_Bottom_CC1TriggerEvent

继续阅读

windows下编译tensorflow c++ library及与opencv的使用

tensorflow在1.3后加入了官方的windows支持,可以使用cmake在vs2015下编译c++ library。但坑还是很多,简单整理了1.3版本编译及使用过程。并介绍了编译部分kernel的方法。其他版本也可参考进行编译。

编译版本为1.3,只cpu。带gpu的tensorflow可以用1.5以后的版本。

编译前准备

组件下载或安装

1.CMake version 3.5以上

2.git (http://git-scm.com)

3.swig (http://www.swig.org/download.html)

4.Visual Studio 2015

5.Python 3.5 64-bit (选择添加安装lib文件)

6.NumPy 1.11.0 以上

注意事项:CMake 与 git安装时需要将其加入到环境变量中,否则后续编译过程中会出现找不到相关程序的错误

编译过程

1.设置vs使用64位的编译工具(否者有一定概率报out-of-memory的错误)

继续阅读

centos7 安装 nginx php7

1.安装epel源

yum install epel-release

2.安装nginx

yum install nginx

3.add php7 repository

rpm -Uvh https://mirror.webtatic.com/yum/e17/webtatic-release.rpm

4.安装php7

根据需要添加删除

yum install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-devel

5配置PHP7

vi /etc/php-fpm.d/www.conf

修改

user = nginx

group = nginx

设置session

mkdir -p /var/lib/php/session

chown nginx:nginx -R /var/lib/php/session/

设置自动启动

sudo systemctl start php-fpm

sudo systemctl start nginx

sudo systemctl enable php-fpm

sudo systemctl enable nginx

6.安装MariaDB

yum install mariadb mariadb-server

自启动&配置

systemctl start mariadb

systemctl enable mariadb

mysql_secure_installation

7.配置nginx

vi /etc/nginx/conf.d/default.conf

添加

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

 

测试

 

Matrox Imaging Libray 开发实例

一.数据类型

MIL_ID: MIL标准的实例化类型

MIL_INT:整数类型,可以转化未INT类型使用。但使用MIL库函数时,必须使用MIL_INT,不要用INT代替。部分情况下会计算错误

MIL_DOUBLE:类似同上

二.典型函数举例

1.实例化系统环境

MIL_ID MilApplication,MilSystem;

/* Allocate a MIL application. */
MappAlloc(M_NULL, M_DEFAULT, &MilApplication);

/* Allocate a MIL system. */
MsysAlloc(M_DEFAULT, M_SYSTEM_HOST, M_DEFAULT, M_DEFAULT, &MilSystem);

2.载入/保存图片

MIL_ID MilImage;

MbufRestore(filename.toUtf8().data(), MilSystem,&MilImage);//读取图片

MbufExport(temps.toUtf8().data(),M_PNG,MilImage);//保存成PNG

3.获取图片信息

MIL_INT SrcImageSizeX = 0;
MIL_INT SrcImageSizeY = 0;
MIL_INT SrcImageType = 0;
void* SrcImageDataPtr = M_NULL;
MIL_INT SrcImagePitchByte = 0;
MIL_INT SrcImageDataSize = 0;

MbufInquire(MilImage, M_SIZE_X, &SrcImageSizeX);//宽
MbufInquire(MilImage, M_SIZE_Y, &SrcImageSizeY);//高
MbufInquire(MilImage, M_TYPE, &SrcImageType);//图片类型
MbufInquire(MilImage, M_HOST_ADDRESS, &SrcImageDataPtr);//数据指针
MbufInquire(MilImage, M_PITCH_BYTE, &SrcImagePitchByte);//PitchByte
MbufInquire(MilImage, M_SIZE_BYTE, &SrcImageDataSize);//DataSize

4.获取图片最大最小值

MimAllocResult(MilSystem, M_DEFAULT, M_STAT_LIST, &MilExtreme);
MimStat(MilImage, MilExtreme, M_MAX + M_MIN, M_NULL, M_NULL, M_NULL);//设置要获取值的类型
double max = 0;
double min = 0;
MimGetResult(MilExtreme, M_MAX + M_TYPE_DOUBLE, &max);
MimGetResult(MilExtreme, M_MIN + M_TYPE_DOUBLE, &min);

5.简单计算

MimArith(MilImage, -min, MilImage, M_ADD_CONST);//加一个常数
MimArith(MilImage, scale, MilImage, M_MULT_CONST);//乘一个常数

6.边缘检测

MIL_ID MilEdgeContext,MilEdgeResult;

MedgeAlloc(MilSystem, M_CONTOUR, M_DEFAULT, &MilEdgeContext);
MedgeAllocResult(MilSystem, M_DEFAULT, &MilEdgeResult);

MedgeControl(MilEdgeContext, M_CENTER_OF_GRAVITY, M_ENABLE);//启用计录轮廓位置
MedgeControl(MilEdgeContext, M_AVERAGE_STRENGTH+M_SORT1_DOWN, M_ENABLE);//计算平均强度,并设置排序方式
MedgeControl(MilEdgeContext, M_THRESHOLD_MODE, M_USER_DEFINED);//启用自定义THRESHOLD_MODE
MedgeControl(MilEdgeContext, M_THRESHOLD_LOW, 50);//设置阀值

MedgeCalculate(MilEdgeContext, MilImage, M_NULL,M_NULL, M_NULL, MilEdgeResult,M_DEFAULT);//计算轮廓

MedgeGetResult(MilEdgeResult, M_DEFAULT, M_NUMBER_OF_CHAINS+M_TYPE_MIL_INT,&NumEdgeFound, M_NULL);//获取轮廓数量

MedgeGetResult(MilEdgeResult, n, M_CENTER_OF_GRAVITY +M_TYPE_MIL_INT,
&CENTER_OF_GRAVITY_x, &CENTER_OF_GRAVITY_y);//获取特定轮廓的位置

Raspberry Pi 安装 FreshRss阅读器

一。使用到的程序

nginx

php7.0

mysql

FreshRss

二 安装步骤

php7.0安装

1.编辑安装源

$ sudo vi /etc/apt/sources.list

在默认源下添加

deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi

2.设置默认从jessie 安装 新软件从 stretch安装

$ sudo vi /etc/apt/preferences

添加

Package: *

Pin: release n=jessie

Pin-Priority: 600

3.安装

sudo apt-get update

udo apt-get installt stretch php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache php7.0-mbstring php7.0xml php7.0-zip

4.设置

sudo vi /etc/php/7.0/fpm/pool.d/www.conf

确认

user = www-data

group = www-data

nginx/mysql安装 略

配置

1.注意nginx的运行账户与php-frm一致

2.nignx php设置

location ~ \.php$ {
# Choose either a socket or TCP/IP address
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}

3.新建一个数据库给FreshRss使用

FreshRss安装

1.下载源

cd /var/www

sudo git clone https://github.com/FreshRSS/FreshRSS.git

2.修改权限

sudo chown -R www-data:www-data /var/www/freshrss

3.浏览器进入主目录,根据提示设置就可以了

 

CentOS7 无用户共享文件夹配置

1.关闭SELinux

vi /etc/selinux/config

将SELINUX=enforcing 改为SELINUX=disabled(需重启机器)

2.安装samba

yum install samba samba-client

3.配置共享访问

编辑 /etc/samba/smb.conf

在[global]中添加:

security = user

map to guest = Bad User

#允许guest用户

guest account = administrator

#guest映射为系统某一账户

4.配置共享文件夹

[RDP]
comment = RDP_Defect
path = /home/administrator/RDP_Defect
valid users = administrator
writable = yes
available = yes
public = yes
case sensitive = auto
preserve case = Yes
short preserve case = Yes#设置可以修改的账户(global中的账户),并设置大小写不敏感

5.设置启动

启动  systemctl start smb

开机启动  systemctl enable smb