长沙| 蔚县| 陕西| 建始| 东平| 澄迈| 宜春| 卫辉| 昭平| 昌都| 大厂| 清涧| 庆安| 双辽| 和硕| 奇台| 黄山区| 汝城| 曲周| 南涧| 丹凤| 沭阳| 涿鹿| 日喀则| 岳阳县| 邹城| 带岭| 纳溪| 夏邑| 松江| 乌什| 大同县| 南涧| 灵川| 沾益| 峨眉山| 雁山| 福鼎| 石泉| 准格尔旗| 玉山| 佛山| 洪泽| 桓台| 得荣| 玛沁| 金湖| 孝感| 上犹| 青田| 崇信| 信宜| 庐山| 万宁| 马山| 察哈尔右翼前旗| 自贡| 鸡东| 新乐| 会昌| 牙克石| 内丘| 涿鹿| 德令哈| 铜川| 乌拉特前旗| 资阳| 江孜| 民乐| 高密| 南漳| 茶陵| 中卫| 灞桥| 洪雅| 镇平| 上高| 从化| 米易| 龙岗| 肃南| 江孜| 宁远| 阿荣旗| 柏乡| 万载| 土默特左旗| 神农架林区| 八一镇| 张北| 商洛| 盘县| 咸阳| 淳安| 荔波| 灵川| 天长| 岚皋| 罗定| 长春| 石屏| 亚东| 托克逊| 扎兰屯| 临县| 益阳| 九江市| 台山| 怀安| 沭阳| 贵溪| 文山| 彭泽| 融安| 林西| 枣强| 白城| 铅山| 武功| 赞皇| 浠水| 宿州| 临猗| 玉屏| 隰县| 塔河| 永靖| 铁山| 忻城| 武夷山| 乐安| 宁海| 莱州| 达孜| 三台| 科尔沁左翼中旗| 宾阳| 井陉矿| 滴道| 菏泽| 临朐| 南靖| 攀枝花| 南海| 天水| 婺源| 图木舒克| 丹阳| 法库| 城口| 富蕴| 金华| 建水| 和顺| 赣州| 呼图壁| 嘉善| 天山天池| 廉江| 枞阳| 龙江| 公安| 博山| 新会| 馆陶| 桦南| 普格| 宽城| 盐城| 南芬| 敦煌| 黎川| 带岭| 金华| 浏阳| 柞水| 彭阳| 沈阳| 吴江| 科尔沁右翼中旗| 镇平| 江夏| 石狮| 双城| 合作| 广东| 南和| 安图| 洱源| 盂县| 郧县| 砚山| 双柏| 西沙岛| 饶阳| 宁武| 乡宁| 老河口| 乌恰| 凤冈| 罗平| 土默特右旗| 贡嘎| 隆回| 井冈山| 嘉禾| 安泽| 花都| 玛曲| 龙里| 甘棠镇| 龙岩| 巫溪| 资中| 佳县| 定南| 林周| 黄山市| 迁安| 酒泉| 抚松| 惠来| 平遥| 聂拉木| 琼结| 乳山| 东西湖| 阳高| 临桂| 阿克塞| 代县| 灵台| 天峨| 麦积| 淮滨| 高港| 鄯善| 涿鹿| 通许| 汉阳| 会宁| 白朗| 湖北| 华阴| 济源| 琼结| 永昌| 南宁| 鼎湖| 东乌珠穆沁旗| 高台| 进贤| 纳雍| 宜君| 泾川| 郏县| 略阳| 特克斯| 宣化县| 清远| 遂川| 石龙| 界首| 长武| 我的异常网

"民族团结一家亲"高雅音乐进机关专场音乐会奏响

2018-05-27 23:28 来源:新华社

  "民族团结一家亲"高雅音乐进机关专场音乐会奏响

  11K影院本市普通高中提前招生录取自主选拔工作由此拉开序幕。    去年9月,美国对伊朗实施了新一轮制裁。

    纽约南区的联邦检察官杰弗里·伯曼23日在记者会上说,这种“无耻的大规模网络攻击”是“司法部起诉过的最大一起由国家发起的黑客行动”。对于小熊来说,这种自制的过程,基本是没指望了,一辈子非酋的命。

      2018年春节前,新型的出租车智能终端一体机在北京千余辆出租车上投入试运营,目前正在推广安装。尽管勒布朗的年龄在不断增长,但每年至少会花100万美元保养身体的他,本赛季仍旧没有出现任何下滑的痕迹!事实上,在对阵之前,勒布朗本赛季的总助攻已经创造了个人生涯单赛季新高,从詹姆斯场均分板助攻的数据来看,也完全是MVP级别的表现!众所周知,在此前客场对阵的比赛中,詹姆斯还贡献了堪称年度十佳的扣篮——隔扣大中锋努尔基奇!那记扣篮的难度和精彩之处就在于努尔基奇身高达到2米11,且勒布朗起跳的位置距离篮筐非常远,将他出色的弹跳展现得淋漓尽致!时隔不到两周时间,在骑士对阵篮网的比赛中,詹姆斯又是贡献了一记年度十佳的超强隔扣,基本锁定了今日十佳进球之首!比赛首节还剩5秒左右,借助队友的掩护,詹姆斯直接持球快速杀向禁区,面对康宁汉姆、乔哈里斯的防守,勒布朗直接选择无视,在距离篮筐还有差不多2米的位置起跳,最终成功完成扣篮,无情隔扣了自己的前队友乔哈里斯!尽管是客场作战,但在见证詹姆斯完成这记变态扣篮后,篮网主场瞬间沸腾,球迷纷纷起立为勒布朗鼓掌喝彩,骑士板凳席也瞬间陷入疯狂的庆祝之中!33岁了,勒布朗还能时不时就上演如此超强隔扣,不得不说,除了自身强大的天赋,这和他的勤奋训练也有着直接的关系。

  今天风很大,我总是尝试Push,但同时要留意安全——而这就会产生差别。为此,我们根据可能出现的各类情况,提前组织官兵到园内进行实地勘察演练,熟悉地形地貌,做足各类应急预案,确保遇有情况能够立即处置。

    功能    支持银行卡和电子支付    北青报记者了解到,这种一体机产品是指设备供应商按照北京《更新出租小轿车技术要求》生产的新型装置。

  时间3月24日,爵士客场加时憾负。

  “数据杀熟”,社会公平那杆秤怎可失衡东方网王凯磊王永娟  所谓“大数据杀熟”,有人将其定义为互联网厂商利用自己所拥有的用户数据,对老用户实行价格歧视的行为。图说:在徐汇区滨江,开了一堂别有生趣的行走公开课,近200位市民依江而行  在徐汇区滨江,开了一堂别有生趣的行走公开课,50个家庭近200位市民依江而行,徒步5公里,体验了滨江美育课、滨江文学课、滨江体育课、滨江科学课和滨江生态课。

      发现    出租车安装实名计价器    昨天中午,市民朱先生在乘出租车时发现,计价器的下方安装了一个电子屏幕,屏幕显示的是出租车和司机的相关信息,不仅能看到车牌号、车辆所属公司,还能看到司机的身份信息并能核查其从业资格证信息。

    托夫勒说:“变化有如雪崩,铺天盖地而来,而我们很多人仍然浑然不觉。  中国公民  待检区标识  外国人  待检区标识  请您按照标识进入待检区,边检人员会将您引导至中外旅客对应的查验通道接受查验,便于您快速通关。

  据悉,今年是华东师大二附中建校60周年,从去年十月开始,学校提出每月都举办一项重大活动以倒计时迎接金秋10月校庆的到来,而这次3月25日的校园开放日活动,既是学校招生的常规工作,也是学校迎接60周年校庆的重要活动之一。

  11K影院这就需要欧盟及其成员国作出协调一致的坚定回应。

  事实上,有足球天赋的中国人恐怕还有很多,可一旦组成一支队,捏到一块儿,就立马成为“鱼腩”。”(编辑:姚凡)特别声明:本文为自媒体作者上传并发布,仅代表该作者观点。

  11K影院 我的异常网 我的异常网

  "民族团结一家亲"高雅音乐进机关专场音乐会奏响

 
责编:
注册

"民族团结一家亲"高雅音乐进机关专场音乐会奏响

11K影院 由于刚果(金)政府彻底修改了相关法规并暂停国际收养,这一数字在2017年降至4人。


来源:机器之心

原标题:教程 | 如何使用Docker、TensorFlow目标检测API和OpenCV实现实时目标

原标题:教程 | 如何使用Docker、TensorFlow目标检测API和OpenCV实现实时目标检测和视频处理

选自TowardsDataScience

作者:Léo Beaucourt

机器之心编译

参与:李诗萌、路雪

本文展示了如何使用 Docker 容器中的 TensorFlow 目标检测 API,通过网络摄像头执行实时目标检测,同时进行视频后处理。作者使用的是 OpenCV 和 Python3 多进程和多线程库。本文重点介绍了项目中出现的问题以及作者采用的解决方案。

完整代码地址:https://github.com/lbeaucourt/Object-detection

用 YouTube 视频进行视频处理测试

动机

我是从这篇文章《Building a Real-Time Object Recognition App with Tensorflow and OpenCV》(https://towardsdatascience.com/building-a-real-time-object-recognition-app-with-tensorflow-and-opencv-b7a2b4ebdc32)开始探索实时目标检测问题,这促使我研究 Python 多进程库,使用这篇文章(https://www.pyimagesearch.com/2015/12/21/increasing-webcam-fps-with-python-and-opencv/)中介绍的方法提高每秒帧数(frames per second,FPS)。为了进一步加强项目的可移植性,我试着将自己的项目整合到 Docker 容器中。这一过程的主要困难在于处理流入和流出容器的视频流。

此外,我还在项目中添加了视频后处理功能,这一功能也使用了多进程,以减少视频处理的时间(如果使用原始的 TensorFlow 目标检测 API 处理视频,会需要非常非常长的时间)。

在我的个人电脑上可以同时进行高性能的实时目标检测和视频后处理工作,该过程仅使用了 8GB 的 CPU。

用于数据科学的 Docker

鉴于大量文章对 TensorFlow 目标检测 API 的实现进行了说明,因此此处不再赘述。作为一名数据科学家,我将展示如何在日常工作中使用 Docker。请注意,我用的是来自 Tensorflow 的经典 ssd_mobilenet_v2_coco 模型。我在本地复制了模型(.pb 文件)和对应的标签映射,以便后续个人模型的运行。

我相信现在使用 Docker 已经是数据科学家最基础的技能了。在数据科学和机器学习的世界中,每周都会发布许多新的算法、工具和程序,在个人电脑上安装并测试它们很容易让系统崩溃(亲身经历!)。为了防止这一悲惨事件的发生,我现在用 Docker 创建数据科学工作空间。

你可以在我的库中找到该项目的相关 Docker 文件。以下是我安装 TensorFlow 目标检测的方法(按照官方安装指南进行):


# Install tensorFlow
RUN pip install -U tensorflow
# Install tensorflow models object detection
RUN git clone https://github.com/tensorflow/models /usr/local/lib/python3.5/dist-packages/tensorflow/models
RUN apt-get install -y protobuf-compiler python-pil python-lxml python-tk
#Set TF object detection available
ENV PYTHONPATH "$PYTHONPATH:/usr/local/lib/python3.5/dist-packages/tensorflow/models/research:/usr/local/lib/python3.5/dist-packages/tensorflow/models/research/slim"
RUN cd /usr/local/lib/python3.5/dist-packages/tensorflow/models/research && protoc object_detection/protos/*.proto --python_out=.


同样,我还安装了 OpenCV:


# Install OpenCV
RUN git clone https://github.com/opencv/opencv.git /usr/local/src/opencv
RUN cd /usr/local/src/opencv/ && mkdir build
RUN cd /usr/local/src/opencv/build && cmake -D CMAKE_INSTALL_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/ .. && make -j4 && make install


建立图像会花几分钟的时间,但是之后用起来就会又快又容易。

实时目标检测

首先我试着将目标检测应用于网络摄像头视频流。《Building a Real-Time Object Recognition App with Tensorflow and OpenCV》完整地介绍了这项工作的主体部分。困难在于如何将网络摄像头视频流传送到 Docker 容器 中,并使用 X11 服务器恢复输出流,使视频得以显示出来。


将视频流传送到容器中

使用 Linux 的话,设备在 /dev/ 目录中,而且通常可以作为文件进行操作。一般而言,你的笔记本电脑摄像头是「0」设备。为了将视频流传送到 docker 容器中,要在运行 docker 图像时使用设备参数:


docker run --device=/dev/video0


对 Mac 和 Windows 用户而言,将网络摄像头视频流传送到容器中的方法就没有 Linux 那么简单了(尽管 Mac 是基于 Unix 的)。本文并未对此进行详细叙述,但 Windows 用户可以使用 Virtual Box 启动 docker 容器来解决该问题。

从容器中恢复视频流

解决这个问题时花了我一些时间(但解决方案仍旧不尽如人意)。我在 http://wiki.ros.org.ashley4u.com/docker/Tutorials/GUI 网页发现了一些使用 Docker 图形用户界面的有用信息,尤其是将容器和主机的 X 服务器连接,以显示视频。

首先,你必须要放开 xhost 权限,这样 docker 容器才能通过读写进 X11 unix socket 进行正确显示。首先要让 docker 获取 X 服务器主机的权限(这并非最安全的方式):


xhost +local:docker


在成功使用该项目后,再将控制权限改回默认值:


xhost -local:docker

创建两个环境变量 XSOCK 和 XAUTH:


XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth

XSOCK 指 X11 Unix socket,XAUTH 指具备适当权限的 X 认证文件:


xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

最后,我们还要更新 docker 运行的命令行。我们发送 DISPLAY 环境变量,为 X11 Unix socket 和带有环境变量 XAUTHORITY 的 X 认证文件安装卷:


docker run -it --rm --device=/dev/video0 -e DISPLAY=$DISPLAY -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH


现在我们可以运行 docker 容器了,而它完成后是这样的:

工作中的我和其他物体(因为害羞就不露脸了)。

尽管主机配置有 X 服务器,但我还是无法完全删除我代码中疑似错误的部分。OpenCV 需要通过调用 Python 脚本使用 cv2.imshow 函数进行「初始化」。我收到了以下错误信息:


The program 'frame' received an X Window System error.

然后,我可以调用 Python 主脚本(my-object-detection.py),视频流也可以发送到主机的显示器了。我对使用第一个 Python 脚本初始化 X11 系统的解决方法并不十分满意,但是我尚未发现其他可以解决这一问题的办法。

视频处理


为了成功用网络摄像头实时运行目标检测 API,我用了线程和多进程 Python 库。线程用来读取网络摄像头的视频流,帧按队列排列,等待一批 worker 进行处理(在这个过程中 TensorFlow 目标检测仍在运行)。

就视频处理而言,使用线程是不可能的,因为必须先读取所有视频帧,worker 才能对输入队列中的第一帧视频应用目标检测。当输入队列满了时,后面读取的视频帧会丢失。也许使用大量 worker 和多个队列可以解决这一问题(但会产生大量的计算损失)。

简单队列的另一个问题是,由于分析时间不断变化,输出队列中的视频帧无法以与输入队列相同的顺序发布。

为了添加视频处理功能,我删除了读取视频帧的线程,而是通过以下代码来读取视频帧:


while True:
 # Check input queue is not full
 if not input_q.full():
    # Read frame and store in input queue
    ret, frame = vs.read()
     if ret:            
       input_q.put((int(vs.get(cv2.CAP_PROP_POS_FRAMES)),frame))

如果输入队列未满,则接下来会从视频流中读取下一个视频帧,并将其放到队列中去。否则输入队列中没有视频帧是不会进行任何处理的。

为了解决视频帧顺序的问题,我使用优先级队列作为第二输出队列:

1. 读取视频帧,并将视频帧及其对应的编号一并放到输入队列中(实际上是将 Python 列表对象放到队列中)。

2. 然后,worker 从输入队列中取出视频帧,对其进行处理后再将其放入第一个输出队列(仍带有相关的视频帧编号)。


while True:
 frame = input_q.get()
frame_rgb = cv2.cvtColor(frame[1], cv2.COLOR_BGR2RGB)
 output_q.put((frame[0], detect_objects(frame_rgb, sess, detection_graph)))


3. 如果输出队列不为空,则提取视频帧,并将视频帧及其对应编号一起放入优先级队列,视频编号即为优先级编号。优先级队列的规模被设置为其他队列的三倍。


# Check output queue is not empty
if not output_q.empty():
 # Recover treated frame in output queue and feed priority queue
 output_pq.put(output_q.get())


4. 最后,如果输出优先级队列不为空,则取出优先级最高(优先级编号最小)的视频(这是标准优先级队列的运作)。如果优先级编号与预期视频帧编号一致,则将这一帧添加到输出视频流中(如果有需要的话将这一帧写入视频流),不一致的话则将这一帧放回优先级队列中。


# Check output priority queue is not empty
if not output_pq.empty():
prior, output_frame = output_pq.get()
if prior > countWriteFrame:
output_pq.put((prior, output_frame))
else:
countWriteFrame = countWriteFrame + 1
# Do something with your frame

要停止该进程,需要检查所有的队列是否为空,以及是否从该视频流中提取出所有的视频了。


if((not ret) & input_q.empty() & 
output_q.empty() & output_pq.empty()):
break

总结

本文介绍了如何使用 docker 和 TensorFlow 实现实时目标检测项项目。如上文所述,docker 是测试新数据科学工具最安全的方式,也是我们提供给客户打包解决方案最安全的方式。本文还展示了如何使用《Building a Real-Time Object Recognition App with Tensorflow and OpenCV》中的原始 Python 脚本执行多进程视频处理。

原文链接:https://towardsdatascience.com/real-time-and-video-processing-object-detection-using-tensorflow-opencv-and-docker-2be1694726e5



本文为机器之心编译,转载请联系本公众号获得授权

?------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:editor@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

  • 好文
  • 钦佩
  • 喜欢
  • 泪奔
  • 可爱
  • 思考

凤凰网科技官方微信

凤凰新闻 天天有料
分享到:
11K影院 我的异常网