0%

3.4.2 以后因部分算法被申请专利, 在开源版本中已移除, 推荐使用 3.4.1.15版本, 所有算法均可使用.

3.4.1.15 依赖下载地址:

3.4.1.15 只有Python3.6版本的whl, Anaconda 默认 3.7, 将Python切换至3.6.

1
2
conda create -n py36 python=3.6
activate py36

notebook 添加 3.6 环境, 在 py36 环境下运行:

阅读全文 »

[TOC]

OpenCV 简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。

OpenCV 是跨平台的,可以在 Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。

OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。

OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。

阅读全文 »

  1. c++: internal compiler error: Killed (program cc1plus)
    网上说是内存原因, 一般云主机都是1G左右内存, 没开启swap, 我make 时开启了多线程处理, 非常有可能是这个原因
    • 错误提示
      1
      2
      3
      4
      5
      6
      c++: internal compiler error: Killed (program cc1plus)
      Please submit a full bug report,
      with preprocessed source if appropriate.
      See <http://bugzilla.redhat.com/bugzilla> for instructions.
      make[2]: *** [modules/CMakeFiles/ade.dir/__/3rdparty/ade/ade-0.1.1d/sources/ade/source/passes/communications.cpp.o] Error 4
      make[2]: *** Waiting for unfinished jobs....
    • 解决方法, 启用swap: linux 创建 swap 交换空间

Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
FROM centos:7.4.1708

MAINTAINER noasking

# 更换阿里源
RUN yum install -y wget
RUN cd /etc/yum.repos.d \
&& mv CentOS-Base.repo CentOS-Base.repo.bak \
&& wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum clean all \
&& yum makecache

# 必要なパッケージインストール
################################################################################
RUN yum update -y \
&& yum install -y git gcc gcc-c++ autoconf automake cmake \
freetype-devel libtool make mercurial nasm \
pkgconfig zlib-devel \
bzip2-devel hostname \
openssl \
openssl-devel \
wget \
which \
boost* \
ant \
&& yum clean all

# Java 安装
ADD jdk-8u131-linux-x64.tar.gz /

# 配置环境变量
ENV JAVA_HOME /jdk1.8.0_131
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin

# OpenCV 配置
################################################################################
COPY opencv-3.4.0.tar.gz /

RUN cd \
&& mkdir opencv && tar xvzf /opencv-3.4.0.tar.gz -C opencv --strip-components 1 \
&& cd opencv \
&& mkdir build \
&& cd build \
&& cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opencv/release -D BUILD_TESTS=OFF ..\
&& make -j8 \
&& make install \
&& cp /opencv/release/share/OpenCV/java/libopencv_java340.so /usr/local/lib/ \
&& cd \
&& rm -f /opencv-3.4.0.tar.gz

# Boostのパス設定
ENV BOOST_ROOT /usr/lib64/
ENV Boost_INCLUDE_DIR /usr/include/boost/
# LD_LIBRARY_PATH設定
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib

# WORK_DIRECTORY設定
WORKDIR /app

# CMD設定(BASH)
CMD ["/bin/bash"]

java8 :下载地址

opencv : 下载地址

docker build -t xiaoweiba1028/opencv-java .

大部分云主机都是没有开启 swap 交换分区的, 且内存都在 1-2G 左右, 在编译源码时可能会因为内存不足而编译失败.

1. 创建一个空文件

  • sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

    2. Bake swap file:

  • sudo mkswap /swapfile

    3. 开机时启动:

    1
    2
    # 把下面这行加到 /etc/fstab
    /media/fasthdd/swapfile.img swap swap sw 0 0

    4. 激活:

  • swapon /swapfile

    5. 验证是否成功

  • cat /proc/swaps
    1
    2
    3
    4
    5
    [root@host build]# cat /proc/swaps
    Filename Type Size Used Priority
    /swap file 135164 135112 -2
    /var/swapfile file 524284 491508 -3
    /swapfile file 2097148 31916 -4
  • grep ‘Swap’ /proc/meminfo
    1
    2
    3
    4
    [root@host build]# grep 'Swap' /proc/meminfo
    SwapCached: 32752 kB
    SwapTotal: 2756596 kB
    SwapFree: 2098060 kB

抽取Jar包中的静态文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/bash
#######################
# created by code on 2019/11/06 15:56:14
#######################
function setVars(){
basepath=/home/icampus3.0
jdkHome=${basepath}/jdk8
servHome=${basepath}/pkgs/paper-manager

start=${servHome}/start.sh
log=${basepath}/logs/paper-manager.log
java=${jdkHome}/bin/java
servFile=${servHome}/paper-manager.jar
option="-server -Xms180m -Xmx200m -Dfile.encoding=utf-8 -Dspring.config.location=bootstrap.yml -Darchaius.configurationSource.additionalUrls=file:///home/icampus3.0/pkgs/config/conf_prod/globalconfig.properties -jar ${servFile} "

# manager unzip config
servName=paper
jarPath=BOOT-INF/classes
# 静态文件配置
servJsPath=${jarPath}/static/custom/${servName}
JsHome=${basepath}/icampus-static/custom/${servName}

# templates 文件配置
servHtmlPath=${jarPath}/templates
HtmlHome=${servHome}/templates

}
function start(){
cd $servHome
sh stop.sh
echo -e " Start to start up paper-manager : "

$java $option > $log 2>&1 &

echo $! > pid

if [[ -z $(cat pid) ]]; then
echo -e " Failed to start up paper-manager"

return 1
else
echo -e " Successful to start up paper-manager"

return 0
fi
}

# $1:处理类型 $2:jar包中的相对路径 $3:部署的绝对路径, 会自动在部署路径添加_bak后缀生成上一次的备份文件夹
function unzipStaticFile() {
echo -e " "
echo -e " ---------UnzipStaticFile start---------"
cd $servHome
if [ ! -n "$1" -o ! -n "$2" -o ! -n "$3" ]
then
echo -e " Unzip params is Not Full!"
echo -e " Params: typeName:$1, unzipTempPath:$2, dstPath:$3"
exit 1
fi
echo -e " Start unZip paper-manager $1 file..."
echo -e " Params: typeName:$1, unzipTempPath:$2, dstPath:$3"
echo " Clean unzip temp path: ${servHome}/temp/$2"
rm -rf ${servHome}/temp/$2 >/dev/null 2>&1
echo " Unzip ..."
unzip ${servFile} $2/* -d ${servHome}/temp >/dev/null 2>&1
# wait 1s unzip Successful
sleep 1
if [ $? -ne 0 ]
then
echo -e " paper-manager unzip Failed!"
exit 1
fi
echo -e " Unzip Successful!\n"

echo -e " Start Deploy paper-manager $1 file..."
# 判断备份文件夹是否存在
if [ -d "$3_bak" ]
then
echo " Clean paper-manager $1 file old backup path: $3_bak"
rm -rf "$3_bak" >/dev/null 2>&1
fi

# 备份一份
echo " Backup now paper-manager $1 file path: $3_bak"
mv $3 "$3_bak" >/dev/null 2>&1
# 将新的静态文件移动过来
echo " Move new paper-manager $1 file path:$3"
mv ${servHome}/temp/$2 $3 >/dev/null 2>&1
echo -e " Deploy paper-manager $1 file Successful!"
echo -e " ---------UnzipStaticFile end---------"
echo -e " "
}

setVars
start
unzipStaticFile JS ${servJsPath} ${JsHome}

# html 可选部署
#if [ $1 -a $1 = 1 ]
# then
# unzipStaticFile Html ${servHtmlPath} ${HtmlHome}
#fi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--加载配置文件,为下面读取数据库信息准备-->
<properties resource="application.properties"/>

<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">

<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.jnshu.util.MyMapper" />
<!--caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true-->
<property name="caseSensitive" value="true"/>
</plugin>

<!-- 阻止生成自动注释 -->
<commentGenerator>
<property name="javaFileEncoding" value="UTF-8"/>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>

<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>

<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>

<!--生成Model类存放位置-->
<javaModelGenerator targetPackage="com.jnshu.domain" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>

<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!--生成Dao类存放位置-->
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.jnshu.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>

<!--生成对应表及类名
去掉Mybatis Generator生成的一堆 example
-->
<table tableName="student_info" domainObjectName="StudentInfo" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>