脚本宝典收集整理的这篇文章主要介绍了Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
https://github.COM/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、docker、Kubernetes、DevOPS等;
对于人脸检测的应用来说,OpenJDK的官方镜像是不够用的,因为用java实现人脸检测需要一个关键技术:javacv,在javacv运行过程中需要用到opencv的一些本地库,因此需要在运行环境中安装opencv
如下图所示,一个人脸检测应用自下而上由以下六部分构成,如果将底部的操作系统、JDK、OpenCV做成基础镜像就方便多了,咱们开发应用的时候只要需关注上面三层即可,而上面三层不就是个普通的maven工程吗?
之所以选择CentOS作为操作系统,是因为平时工作中最常用的就是它了
纵观OpenJDK官方的各种镜像,并没有发现CentOS作为操作系统的,因此自己动手吧,思路很简单:找到OpenJDK的Dockerfile文件,把它的基础镜像换成CentOS7.6即可
以下是Dockerfile的所有内容,可见核心是根据不同的操作系统下载文件然后安装,逻辑简单清晰就不多说了:
From centos:7.6.1810
RUN set -eux;
yum install -y
gzip
tar
binutils
freetype fontconfig
;
env JAVA_HOME /usr/java/openjdk-8
ENV PATH $JAVA_HOME/bin:$PATH
# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
RUN set -eux;
Arch="$(objdump="$(command -v objdump)" && objdump --file-headers "$objdump" | awk -F '[:,]+[[:space:]]+' '$1 == "architecture" { PRint $2 }')";
case "$arch" in
'i386:x86-64')
downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_8u292b10.tar.gz';
;;
'aarch64')
downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_aarch64_linux_8u292b10.tar.gz';
;;
*) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;;
esac;
curl -fL -o openjdk.tgz "$downloadUrl";
curl -fL -o openjdk.tgz.asc "$downloadUrl.sign";
export GNUPGHOME="$(mktemp -d)";
# pre-fetch Andrew Haley's (the OpenJDK 8 and 11 Updates OpenJDK project lead) key so we can verify that the OpenJDK key was signed by it
# (https://github.com/docker-library/openjdk/pull/322#discussion_r286839190)
# we pre-fetch this so that the signature it makes on the OpenJDK key can survive "import-clean" in gpg
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys EAC843EBD3EFDB98CC772FADA5CD6035332FA671;
# TODO find a good link for users to verify this key is right (https://mail.openjdk.java.net/pipermail/jdk-updates-dev/2019-April/000951.htML is one of the only mentions of it I can find); perhaps a note added to https://adoptopenjdk.net/upstream.html would make sense?
# no-self-sigs-only: https://salsa.Debian.org/debian/gnupg2/commit/c93ca04a53569916308b369c8b218dad5ae8fe07
gpg --batch --keyserver keyserver.ubuntu.com --keyserver-options no-self-sigs-only --recv-keys CA5F11C6CE22644D42C6AC4492EF8D39DC13168F;
gpg --batch --list-sigs --keyid-format 0xLONG CA5F11C6CE22644D42C6AC4492EF8D39DC13168F
| tee /dev/stderr
| grep '0xA5CD6035332FA671'
| grep 'Andrew Haley';
gpg --batch --verify openjdk.tgz.asc openjdk.tgz;
rm -rf "$GNUPGHOME";
mkdir -p "$JAVA_HOME";
tar --extract
--file openjdk.tgz
--directory "$JAVA_HOME"
--strip-components 1
--no-same-owner
;
rm openjdk.tgz*;
rm -rf "$JAVA_HOME/jre/lib/security/cACERts";
# see "update-ca-trust" script which creates/maintains this cacerts bundle
ln -sT /etc/pki/ca-trust/extracted/java/cacerts "$JAVA_HOME/jre/lib/security/cacerts";
# https://github.com/oracle/docker-images/blob/a56e0d1ed968ff669d2e2ba8a1483d0f3acc80c0/OracleJava/java-8/Dockerfile#L17-L19
ln -sfT "$JAVA_HOME" /usr/java/default;
ln -sfT "$JAVA_HOME" /usr/java/latest;
for bin in "$JAVA_HOME/bin/"*; do
base="$(basename "$bin")";
[ ! -e "/usr/bin/$base" ];
alternatives --install "/usr/bin/$base" "$base" "$bin" 20000;
done;
# basic smoke test
javac -version;
java -version
写完之后执行docker build -t bolingcavalry/centos7.6-jdk8:0.0.1 .即可生成镜像,如果您有hub.docker.com的账号,还可以将其推送到中央仓库,给更多人使用
用history命令看看镜像内容,详情如下,合计五百多兆,已经不小了:
CN0014009475M:~ will$ docker history bolingcavalry/centos7.6-jdk8:0.0.1
IMAGE CREATED CREATED BY SIZE COMMENT
a5dead4a6505 2 days ago /bin/sh -c set -eux; arch="$(objdump… 209MB
<missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/java/openjd… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/o… 0B
<missing> 2 days ago /bin/sh -c set -eux; yum install -y … 144MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:54b004357379717DF… 202MB
docker pull bolingcavalry/centos7.6-jdk8:0.0.3
From bolingcavalry/centos7.6-jdk8:0.0.1
RUN echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
&& source /etc/profile
RUN set -eux;
yum install -y
make
@R_635_1512@
gcc
gcc-c++
gtk+-devel
gimp-devel
gimp-devel-tools
gimp-help-browser
zlib-devel
liBTiff-devel
libjpeg-devel
libpng-devel
gstreamer-devel
libavc1394-devel
libraw1394-devel
libdc1394-devel
jasper-devel
jasper-utils
swig
python
libtool
nasm
build-essential
ant
unzip
;
RUN set -eux;
curl -fL -o opencv-3.4.3.zip https://codeload.github.com/opencv/opencv/zip/3.4.3;
unzip opencv-3.4.3.zip;
rm -rf opencv-3.4.3.zip;
cd opencv-3.4.3;
mkdir build;
cd build;
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..;
make;
make install;
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTS=OFF ..;
make -j8;
make install
CN0014009475M:~ will$ docker history bolingcavalry/opencv3.4.3:0.0.3
IMAGE CREATED CREATED BY SIZE COMMENT
f0306d7a2594 2 days ago /bin/sh -c set -eux; curl -fL -o opencv-… 2.99GB
<missing> 2 days ago /bin/sh -c set -eux; yum install -y … 638MB
<missing> 2 days ago /bin/sh -c echo "export LC_ALL=en_US.UTF-8" … 1.84kB
<missing> 2 days ago /bin/sh -c set -eux; arch="$(objdump… 209MB
<missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/java/openjd… 0B
<missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/o… 0B
<missing> 2 days ago /bin/sh -c set -eux; yum install -y … 144MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:54b004357379717df… 202MB
docker pull bolingcavalry/opencv3.4.3:0.0.3
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界... https://github.com/zq2599/bLOG_demos
以上是脚本宝典为你收集整理的Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)全部内容,希望文章能够帮你解决Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。