为树莓派CM系列模块的 eMMC 烧录系统

前言

前段时间树莓派(Raspberry Pi)发布了一款新的计算模块 Compute Module 3 (CM3) ,是自 2014 年初代 CM1 后首次更新。CM3 计算模块有两个版本,一个是“标准”的 CM3,另一个则是 CM3 Lite,价格分别为 30 美元和 25 美元,CM3配备了 1.2GHz 的 BCM2837 处理器,1GB RAM 和 4G eMMC 闪存。相比之下,CM3 Lite(CM3L)没有内置闪存,反倒是提供了 SD 卡接口,用户可按需选择 eMMC 或是 SD 卡,这个功能更新满足了不少老用户对闪存扩容的需求。CM3和 CM1 相比,CM3 的 CPU 性能是原来的 10 倍,内存比翻了 1 倍。而且也会和 Raspberry Pi 3 一样,支持 Win 10 的物联网系统(Windows10 IoT Core)。

最近越来越多的玩家购买了CM模块和底板,但是苦于一直不能上手,原因是不会给CM模块烧录系统,网上也少有相关的教程,从今天U大就指导你如果玩转树莓派CM系列。

教程

1.首先需要准备好CM模块(CM1/CM3/CM3L)

2.准备好CM模块底板

 

3.下载解压win系统需要的驱动和并安装boot工具(bcm270x-boot-driverCM-Boot-Installer

4.将CM模块插上底板,将左上角的跳线帽跳至EN USB BOOT,然后连接USB SLAVE和PC,最后再连接POWER IN电源给底板供电

5.WIN系统会提示安装驱动,可以取消自动更新驱动,变成手动更新驱动(bcm270x-boot-driver),直到驱动安装正常如下图

 

 

 

 

6.运行安装好的boot工具RPiBoot.exe, 这时候CM模块的eMMC就会模拟成内存卡,出现在系统目录下

7.按照通常的TF卡烧录系统的方法,就可以给CM模块的eMMC烧录系统了(TF卡烧录系统方法

注意:目前CM模块的eMMC只有4G,而官方提供的系统大多都超过4G,烧写时可能会中断并提示空间不够,所以玩家在烧录CM系统时请选择适合4G以下的镜像。

原文

本文来自:树莓派实验室

开源Android Auto车载抬头显示器–OpenAuto

用户已经可以非常轻松地在树莓派上安装Android Auto系统,而更重要的是具备无限潜力。XDA论坛大神f1x就成功DIY了开源Android Auto车载抬头显示器–OpenAuto,搭载了树莓派3开发主板并配置了一个显示器,使用了8GB的MicroSD卡进行扩展,并在GitHub上分享了专用的软件设置。

OpenAuto基于Google Auto制作的内容,并且转换成开发者/DIY社区能够使用的软件。罗列在GitHub上指令并不适用于所有人,但对于那些玩过树莓派且有一点使用经验的人来说,整个安装过程相对简单。

 

OpenAuto具备如下功能:

● 480p, 720p或者支持30/60 FPS的1080P分辨率

● 树莓派3硬件加速支持解码视频流(视频流高达60fps的1080P)

● 所有音频频道(媒体、系统和语音)的音频播放

● 为语音命令的语音输入

● 触控屏和按钮输入

● 蓝牙

● 设备热插播之后的自动启动

● 友好的设置界面

更多内容可以查看GitHub上的相关项目

https://github.com/f1xpl/openauto

本文转自:cnbeta

 

树莓派 Zero USB/以太网方式连接配置教程(macOS平台)

树莓派 Zero 之所以成为一款非常棒的单板计算机并不全因为它小巧的尺寸和便宜的价格,还得益于它便捷、易用的特性。在加装了 Zero Quick Plug 或 microUSB/USB 转换头之后,将树莓派 Zero 和电脑连接起来。树莓派 Zero 即可配置成 USB/以太网设备,这时仅需要一个 USB 接口就实现给树莓派供电的同时将它接入因特网。不再需要携带额外的电源适配器、 USB HUB和无线网卡。可以说这是迄今为止连接树莓派最简单、方便的方式!
对于 Raspbian 2016-10-5 之后的系统镜像,你只需要在系统 SD 卡上修改几处配置文件即可将树莓派配置成一个 USB/以太网设备。

配置 CONFIG.TXT 和 CMDLINE.TXT 文件

请确认你刷入的系统镜像是 2016-10-5 之后的版本。将刷好系统的 SD 卡在电脑上打开,进入 SD 卡根目录并打开 config.txt 文件。在文件末尾添加一行 dtoverlay=dwc2。

保存并关闭 config.txt 文件。

再打开 cmdline.txt 文件,请确认你的编辑器已关闭“自动换行”。编辑这个文件的时候不需要插入任何换行符,所有字符都在同一行。找到 rootwait,在后面插入 modules-load=dwc2,g_ether。

保存并关闭 cmdline.txt 文件。

最后在根目录创建一个名为 ssh 的文件或目录。

好了,可以从电脑上弹出 SD 卡了。把 SD 卡插入树莓派 Zero,用 Zero Quick Plug 或 microUSB/USB 转换头将树莓派 Zero 和电脑连接起来。

图中用到的这款连接部件是树莓派 Zero 多功能 USB 插头(Zero Quick Plug),详见下图。

这时系统会自动识别到树莓派。

等待树莓派启动可能需要半分钟,然后就可以在网络列表中看到了设备已分配好 IP 地址。

现在,就可以尝试通过 SSH 连接树莓派的地址 raspberrypi.local 了。

如果你用的是 Raspbian 桌面版,你可以安装一个 RDP(远程桌面协议)客户端然后在电脑上通过远程桌面( “Remote Desktop Connection for Mac” )客户端连接到树莓派,连接地址同样是 raspberrypi.local。(具体方法可参考

另有 Windows 平台下使用这一功能的教程,移步这里阅读

本文来自:树莓派实验室

 

国外开发者尝试在树莓派3上运行Windows 10桌面版

 

虽然在树莓派上用户已经可以安装Windows 10 IoT Core系统,不过得益于近期启动的Windows 10 on ARM平台,荷兰开发者Bas Timmer(推特账号@NTAuthority)近日在树莓派3(Broadcom BCM2837 ARMv8处理器)上成功安装完整版Windows 10系统。

Windows 10 on ARM是微软近期公布、最值得关注的项目,允许在高通骁龙处理器上运行完整版Windows 10系统,并且具备超高续航的优点。

虽然已经成功移植,并且能够运行传统Win32应用程序,但是也存在很多不足。Timmer表示目前系统只能调用1个CPU核心,其他核心会跳出“未支持的处理器”。

 

 

本文来自:

国外开发者尝试在树莓派3上运行Windows 10桌面版

 

DIY一个自拍相机:树莓派 3 +触摸屏显示器

一个使用树莓派 3加触摸屏显示器 、镜头和SenseHAT的有趣项目

使用树莓派,创建一个桌面“自拍”相机。不需要焊接或定制任何电子零件。应用程序也是超级简单。

硬件

整个项目使用了下列的零件:

  • 树莓派3型号B
  • 树莓派触摸屏
  • 树莓派相机
  • SenseHAT
  • 电源
  • 32GB Micro SD 卡

另外还配搭了定制激光切割和折叠亚克力盒。即使你没有激光切割机和亚克力文件夹,也可以使用其他的外壳替代。

O/S及相关

把Raspbian Jessie Lite写入一张Micro SD卡中,然后将主机名由简单的raspberrypi更改为其他名称,编辑根文件系统etc/hostname和etc/hosts文件就可以。这样在网络上会更容易找到主机。

openssh服务器现在默认为禁用,因为我更喜欢通过SSH进行登录,这可以通过在boot partition中创建一个名为ssh的空文件来启用它。

触摸屏技术上是上下倒转安装的,所以要将显示器旋转到正确的方向,有必要编辑config.txt – 也在启动分区,并添加行:

lcd_rotate=2

接下来将Micro SD卡插入Raspberry Pi并接通电源。之后,我建议按照惯例做法,通过登录并输入以下内容更新O / S:

$ sudo apt get update 

$ sudo apt-get dist-upgrade

请注意,由于我们已将主机名更改为selfiecam,因此可以从另一台Linux计算机使用以下命令登录到Pi:

$ ssh pi@selfiecam.local

由于我们想使用SenseHAT,相机和帧缓冲区,一些有用的Python软件也通过安装:

$ sudo apt-get install sense-hat python-picamera python-pygame

最后,需要启用相机和重新启动,这可以透过raspi-config完成:

$ sudo raspi-config

软件

首先,我们需要导入一些库,其中包括上面提到的。

import os
import time
import pygame
from picamera import PiCamera
from sense_hat import SenseHat

我们需要初始化Pygame,它将用来显示图像到帧缓冲区中(显示器)。

pygame.init()
screen = pygame.display.set_mode([800,480])

接下来我们设置摄像机,由于它的物理位置被水平翻转,我们需要通过软件翻转它。

camera = PiCamera()
camera.resolution = (800, 480)
camera.hflip = True

之后配置SenseHAT。

sense = SenseHat()
sense.set_rotation(0)

接下来我们将会定义一个函数,把其中一个文件作为参数,然后使用Pygame来绘制屏幕变成黑色,然后再显示它包含的图像。

def displayImage(file):

image = pygame.image.load(file)
imagerect = image.get_rect()

screen.fill([0, 0, 0])
screen.blit(image, imagerect)
pygame.display.flip()

然后我们定义一个功能,启用视频预览,在SenseHAT LED矩阵上显示3-2-1-0倒计时,截取静止图像前,停止预览,显示图像,並清除LED矩阵。映像文件名中应包含日期和时间。

def getSelfie(): # Start camera video preview

camera.start_preview()    # Commence countdown
sense.show_letter("3", text_colour=[255, 0, 0])    time.sleep(1)
sense.show_letter("2", text_colour=[255, 255, 0])    time.sleep(1)
sense.show_letter("1", text_colour=[0, 255, 0])    time.sleep(1)
sense.show_letter("0", text_colour=[0, 0, 255])    # Capture image and stop preview
filename = time.strftime("/selfies/%Y-%m-%d-%H-%M-%S.jpg")
camera.capture(filename)
camera.stop_preview()    # Display image and clear SenseHAT display
displayImage(filename)
sense.clear()

请注意,LED矩阵上显示的数字颜色是不同的:3 =红色,2 =黄色,1 =绿色,0 =蓝色。

到目前为止,我们只是导入了不同的库和定义函数。接下来,我们将使用displayImage()這个函数在启动时更新触摸屏显示欢迎图像。

displayImage(“/usr/local/share/images/Welcome.png”)

最后,我们进入程序的主循环。在这里,我们等待来自SenseHAT操纵杆的动作。如果这被按住,我们需要等待它被释放后使用getSelfie()函数。如果它被一直保持在左边,我们直接关机。我们可以忽略其他相关动作。

while True: # Wait for and process joystick events 
    event = sense.stick.wait_for_event(emptybuffer=True) 
    if event.direction == "middle" and event.action == "released": 
        getSelfie() 
    elif event.direction == "left" and event.action == "held": 
        os.system("/sbin/shutdown -h now") 
    else:
        pass

运行

/etc/rc.local文件在启动时运行,在这文件添加一行代码防止屏幕自动关闭,接着一秒后会启动自拍照相机应用程序。

sudo sh -c “TERM=linux setterm -blank 0 >/dev/tty0” /usr/local/bin/selfie.py &

重新启动后,我们会看到我们设定的欢迎图像。按下操纵杆时,会显示实时视频预览,并开始倒數计时。

在倒数到零时将会拍照,并停止视频预览,图像会显示在屏幕上。

最后图像可以从SD卡中复制出来。

如果你想自己做这个项目,可以在GitHub上找到Python脚本和亞克力外壳的设计文件。

本文来自:ednchina

在树莓派上用 Syncthing 自建私有云盘

自建的私有云网盘软件很多,比如 Seafile、ownCloud 等,功能很实用,而 Syncthing 最大的特色是采用了与 Resilio Sync (BitTorrent Sync) 类似的 P2P 分布式技术,无需中心服务器,即可让多台设备互相实时同步文件,用过 Resilio Sync 的朋友都明白这种同步方式的优势了。它们两者的实现方式很相似,区别是 Resilio 属于商业软件,需付费使用,在国内已慢慢变得访问(被)困难(墙),而 Syncthing 不仅完全免费且开源,相比 Resilio 还增加了“文件版本控制”、“单向同步”等堪称杀手级的功能特性。

Syncthing 功能上非常接近于 Resilio Sync / BT Sync,不过说它是一款用于搭建网盘的服务器软件或者云存储服务应用似乎并不十分恰当,相较于 Seafile、NextCloud 等服务器工具,Syncthing 实际上更像是一款文件/文件夹同步工具。你可以非常轻松简单地让同一路由器下的多台 PC 电脑、NAS 设备实现局域网互相同步,也可以在 VPS 服务器或 24 小时不关机且有公网 IP 的电脑上安装和配置 Syncthing,让其成为真正意义上的云同步网盘。

更难得的是 Syncthing 开源且免费,跨平台支持 Windows,Mac,Linux,Android。(稍有些遗憾的是目前暂不支持iOS平台)当然也支持树莓派平台,下面应读者要求,树莓派实验室为大家介绍如何在树莓派上安装 Syncthing!(VPS 等 Linux 平台上安装方法类同,也可以参考本文)

获取软件包

#进入用户所在目录
cd ~
#下载软件包,如果发现不能顺畅下载,那可能是墙的锅,手动下载了再通过 SFTP 上传到 /home/pi 目录下也可以
wget https://github.com/syncthing/syncthing/releases/download/v0.14.42/syncthing-linux-arm-v0.14.42.tar.gz
#解压
tar -zxvf syncthing-linux-arm-v0.14.42.tar.gz

注:Syncthing 的版本迭代比较频繁,你可以在这个页面获取最新的安装包。页面中文件名为 syncthing-linux-arm-版本号.tar.gz 的就是树莓派可用的版本。

部署、测试

解压之后当前目录下多了一个名为 syncthing-linux-arm-v0.14.42 的目录。

#强迫症表示要重命名缩短一下:
mv syncthing-linux-arm-v0.14.42 syncthing
#进入 syncthing 目录
cd syncthing
#给主程序加上执行权限
chmod +x syncthing

~/syncthing/syncthing

结果输出一些程序初始化信息,包括网络监听端口、WebUI(操作界面) URL 等,表示部署成功。先不要急着访问 WebUI,因为还需要少量配置。先 Ctrl+C 中止程序。

配置

运行下面的命令编辑 Syncthing 的配置文件:

sudo nano /home/pi/.config/syncthing/config.xml

找到下面的内容

<gui enabled="true" tls="false">
<address>127.0.0.1:8384</address>
<apikey>XXXXXX</apikey>
</gui>

将 127.0.0.1:8384 修改为 0.0.0.0:8384 以便让其他终端可以访问到 Syncthing 的 WebUI。

下面再次运行主程序

~/syncthing/syncthing

不要中断程序,尝试用电脑或者手机的浏览器访问 Syncthing 的 WebUI,地址为
http://树莓派的IP地址:8384

打开之后,会让你设置用户名和密码。下面再大致了解下几个关键的界面:

 

 

到这一步就已经可以投入使用了!
但是使用这个命令运行 Syncthing,程序需要一直在前台运行。为了让它在后台默默执行可以这样

~/syncthing/syncthing &

如果你希望让 Syncthing 可以自动开机运行,可以继续往下阅读。

设置开机自动运行

在 /etc/init.d 目录下建立启动文件

sudo nano /etc/init.d/syncthing

输入以下内容:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Syncthing
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Syncthing
# Description:       Syncthing is for backups
### END INIT INFO
  
# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions
  
DAEMON_NAME="syncthing"
DAEMON_USER=pi
DAEMON_PATH="/home/pi/syncthing/syncthing"
DAEMON_OPTS=""
DAEMON_PWD="${PWD}"
DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
DAEMON_NICE=0
DAEMON_LOG='/var/log/syncthing'
  
[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"
  
do_start() {
  local result
  
    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -eq 0 ]; then
        log_warning_msg "${DAEMON_NAME} is already started"
        result=0
    else
        log_daemon_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
        touch "${DAEMON_LOG}"
        chown $DAEMON_USER "${DAEMON_LOG}"
        chmod u+rw "${DAEMON_LOG}"
        if [ -z "${DAEMON_USER}" ]; then
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        else
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --chuid "${DAEMON_USER}" \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        fi
        log_end_msg $result
    fi
    return $result
}
  
do_stop() {
    local result
  
    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -ne 0 ]; then
        log_warning_msg "${DAEMON_NAME} is not started"
        result=0
    else
        log_daemon_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
        killproc -p "${DAEMON_PID}" "${DAEMON_PATH}"
        result=$?
        log_end_msg $result
        rm "${DAEMON_PID}"
    fi
    return $result
}
  
do_restart() {
    local result
    do_stop
    result=$?
    if [ $result = 0 ]; then
        do_start
        result=$?
    fi
    return $result
}
  
do_status() {
    local result
    status_of_proc -p "${DAEMON_PID}" "${DAEMON_PATH}" "${DAEMON_NAME}"
    result=$?
    return $result
}
  
do_usage() {
    echo $"Usage: $0 {start | stop | restart | status}"
    exit 1
}
  
case "$1" in
start)   do_start;   exit $? ;;
stop)    do_stop;    exit $? ;;
restart) do_restart; exit $? ;;
status)  do_status;  exit $? ;;
*)       do_usage;   exit  1 ;;
esac

保存之后运行

#加可执行权限
sudo chmod +x /etc/init.d/syncthing
#添加默认启动
sudo update-rc.d syncthing defaults

之后你还可以通过这四个命令管理 Syncthing,顾名思义。

sudo service syncthing start
sudo service syncthing stop
sudo service syncthing restart
sudo service syncthing status

如后面你要开机自动运行可以使用

sudo update-rc.d syncthing remove

与 BTSync 的比较

Syncthing 与 BTSync 有着相似的功能,均很强大。
1.Syncthing 与 BTSync 相比,Syncthing 是开源的,MIT协议。可免费用于商业用途,而 BTSync 相反。
2.Syncthing 的方式更侧重个人资料的同步,BTSync 还可以在同步的基础上进行分享。
3.Syncthing 暂无 iOS 版本。

各种平台的客户端可以在官网免费获取:
https://syncthing.net/
(Windows 版的 Syncthing 官方还提供了一个图形界面版的“SyncTrayzor”工具)

GitHub:
https://github.com/syncthing/syncthing

有价值的参考:
在安卓设备上使用 Syncthing
正文的脚本出处

本文来自:树莓派实验室

 

 

 

 

树莓派+YOLO打造人工智能相机

不久之前,亚马逊刚刚推出了DeepLens。这是一款专门面向开发人员的全球首个支持深度学习的摄像机,它所使用的机器学习算法不仅可以检测物体活动和面部表情,而且还可以检测类似弹吉他等复杂的活动。虽然DeepLens还未正式上市,但智能摄像机的概念已经诞生了。

今天,我们将自己动手打造出一款基于深度学习的照相机,当小鸟出现在摄像头画面中时,它将能检测到小鸟并自动进行拍照。最终成品所拍摄的画面如下所示:

相机不傻,它可以很机智

我们不打算将一个深度学习模块整合到相机中,相反,我们准备将树莓派“挂钩”到摄像头上,然后通过WiFi来发送照片。本着“一切从简”(穷)为核心出发,我们今天只打算搞一个跟DeepLens类似的概念原型,感兴趣的同学可以自己动手尝试一下。

接下来,我们将使用Python编写一个Web服务器,树莓派将使用这个Web服务器来向计算机发送照片,或进行行为推断和图像检测。

我们这里所使用的计算机其处理能力会更强,它会使用一种名叫YOLO的神经网络架构来检测输入的图像画面,并判断小鸟是否出现在了摄像头画面内。

我们得先从YOLO架构开始,因为它是目前速度最快的检测模型之一。该模型专门给Tensorflow(谷歌基于DistBelief进行研发的第二代人工智能学习系统)留了一个接口,所以我们可以轻松地在不同的平台上安装和运行这个模型。友情提示,如果你使用的是我们本文所使用的迷你模型,你还可以用CPU来进行检测,而不只是依赖于价格昂贵的GPU。

接下来回到我们的概念原型上… 如果像框内检测到了小鸟,那我们就保存图片并进行下一步分析。

检测与拍照

正如我们所说的,DeepLens的拍照功能是整合在计算机里的,所以它可以直接使用板载计算能力来进行基准检测,并确定图像是否符合我们的标准。

但是像树莓派这样的东西,我们其实并不需要使用它的计算能力来进行实时计算。因此,我们准备使用另一台计算机来推断出现在图像中的内容。

我使用的是一台简单的Linux计算机,它带有一个摄像头以及WiFi无线网卡(树莓派3+摄像头),而这个简单的设备将作为我的深度学习机器并进行图像推断。对我来说,这是目前最理想的解决方案了,这不仅大大缩减了我的成本,而且还可以让我在台式机上完成所有的计算。

当然了,如果你不想使用树莓派视频照相机的话,你也可以选择在树莓派上安装OpenCV 3来作为方案B,具体的安装方法请参考【这份文档】。友情提示,安装过程可谓是非常的麻烦!

接下来,我们需要使用Flask来搭建Web服务器,这样我们就可以从摄像头那里获取图像了。这里我使用了MiguelGrinberg所开发的网络摄像头服务器代码(Flask视频流框架),并创建了一个简单的jpg终端:

#!/usr/bin/envpython
from import lib import import_module
import os
from flask import Flask, render_template, Response
 
#uncomment below to use Raspberry Pi camera instead
#from camera_pi import Camera
 
#comment this out if you're not using USB webcam
from camera_opencv import Camera
 
app =Flask(__name__)
 
@app.route('/')
def index():
 return "hello world!"
 
def gen2(camera):
 """Returns a single imageframe"""
 frame = camera.get_frame()
 yield frame
 
@app.route('/image.jpg')
def image():
 """Returns a single currentimage for the webcam"""
 return Response(gen2(Camera()),mimetype='image/jpeg')
 
if __name__ == '__main__':
app.run(host='0.0.0.0', threaded=True)

如果你使用的是树莓派视频照相机,请确保没有注释掉上述代码中from camera_pi那一行,然后注释掉from camera_opencv那一行。

你可以直接使用命令python3 app.py或gunicorn来运行服务器,这跟Miguel在文档中写的方法是一样的。如果我们使用了多台计算机来进行图像推断的话,我们还可以利用Miguel所开发的摄像头管理方案来管理摄像头以及计算线程。

当我们启动了树莓派之后,首先需要根据IP地址来判断服务器是否正常工作,然后尝试通过Web浏览器来访问服务器。

URL地址格式类似如下:
http://192.168.1.4:5000/image.jpg

在树莓派中加载Web页面及图像来确定服务器是否正常工作:

图像导入及推断

既然我们已经设置好了终端来加载摄像头当前的图像内容,我们就可以构建一个脚本来捕捉图像并推断图像中的内容了。

这里我们需要用到request库(一个优秀的Python库,用于从URL地址获取文件资源)以及Darkflow(YOLO模型基于Tensorflow的实现)。

不幸的是,我们没办法使用pip之类的方法来安装Darkflow,所以我们需要克隆整个代码库,然后自己动手完成项目的构建和安装。安装好Darkflow项目之后,我们还需要下载一个YOLO模型。

因为我使用的是速度比较慢的计算机和板载CPU(而不是速度较快的GPU),所以我选择使用YOLO v2迷你网络。当然了,它的功能肯定没有完整的YOLO v2模型的推断准确性高啦!

配置完成之后,我们还需要在计算机中安装Pillow、numpy和OpenCV。最后,我们就可以彻底完成我们的代码,并进行图像检测了。

最终的代码如下所示:

from darkflow.net.build import TFNet
import cv2
 
from io import BytesIO
import time
import requests
from PIL import Image
import numpy as np
 
options= {"model": "cfg/tiny-yolo-voc.cfg", "load":"bin/tiny-yolo-voc.weights", "threshold": 0.1}
 
tfnet= TFNet(options)
 
birdsSeen= 0
def handleBird():
 pass
 
whileTrue:
 r =requests.get('http://192.168.1.11:5000/image.jpg') # a bird yo
 curr_img = Image.open(BytesIO(r.content))
 curr_img_cv2 =cv2.cvtColor(np.array(curr_img), cv2.COLOR_RGB2BGR)
 
 result = tfnet.return_predict(curr_img_cv2)
 print(result)
 for detection in result:
 if detection['label'] == 'bird':
 print("bird detected")
 birdsSeen += 1
 curr_img.save('birds/%i.jpg' %birdsSeen)
 print('running again')
time.sleep(4)

此时,我们不仅可以在命令控制台中查看到树莓派所检测到的内容,而且我们还可以直接在硬盘中查看保存下来的小鸟照片。接下来,我们就可以使用YOLO来标记图片中的小鸟了。

假阳性跟假阴性之间的平衡

我们在代码的options字典中设置了一个threshold键,这个阈值代表的是我们用于检测图像的某种成功率。在测试过程中,我们将其设为了0.1,但是如此低的阈值会给我们带来是更高的假阳性以及误报率。更糟的是,我们所使用的迷你YOLO模型准确率跟完整的YOLO模型相比,差得太多了,但这也是需要考虑的一个平衡因素。

降低阈值意味着我们可以得到更多的模型输出(照片),在我的测试环境中,我阈值设置的比较低,因为我想得到更多的小鸟照片,不过大家可以根据自己的需要来调整阈值参数。

代码开源

跟之前一样,我已经将所有的代码上传到GitHub上了,感兴趣的同学可以自行下载安装【GitHub传送门】。

* 参考来源:makeartwithpython,FB 小编 Alpha_h4ck 编译,转自 FreeBuf.COM

本文来自:树莓派实验室

树莓派网络存储(NAS) OpenMediaVault 安装配置

OpenMediaVault,是一个开源的基于 Debian Linux 的下一代网络附加存储(NAS)解决方案。它包含众多服务,如 SSH、(S)FTP、SMB / CIFS、DAAP 媒体服务器、RSync、BitTorrent 客户机等。并具有通过插件可增强的模块化设计框架特性。其核心如下:

  • Debian Linux(Squeeze)系统(i386 or x64)
  • 基于Web方式的系统管理
  • 通过Debian软件包简单的系统升级
  • 用户管理
  • 计划任务
  • 多语言支持(0.4.18版支持繁体中文)
  • 基于DNS-SD(Apple’s protocol)的服务公告
  • 插件系统

下面介绍如何在树莓派上安装配置 OpenMediaVault,方便快捷地搭建 NAS。

一.准备工作

1.树莓派1/2/3型 开发板(我用的是3B),适配的5V2A电源;
2.TF卡(不小于4G),TF 读卡器,/boot (vfat)占55.95MB,OWN (ext4) 占3.18GB
3.一台PC,Windows系统。
4.一台显示器或都电视机,HDMI接口,HDMI线。(其实不用显示设备也是可以的,可以SSH在电脑端操作。
5.一块移动硬盘,最好再配个有源USB-Hub
6.TF镜像。找到对应Pi的型号的镜像,omv_2.2.5_rpi2_rpi3.img.gz 或 omv_2.0.15_rpi_rpi2.img.gz 。
下载地址:https://sourceforge.net/projects/openmediavault/files/Raspberry%20Pi%20images/
或者百度网盘(密码: t8gm)。
7.镜像读写工具 win32diskimager
8.磁盘分区工具 DiskGenius
9.远程SSH  PuTTY

二.刷系统

1.解压 omv_2.2.5_rpi2_rpi3.img.gz 得到omv_2.2.5_rpi2_rpi3.img
2.用Win32DiskImager 把omv_2.2.5_rpi2_rpi3.img 镜像写入(Write)TF卡

三.开机测试

1.把刷好的TF插入树莓派,接好HDMI线到显示器,通电开机。第一次开机系统会自动运行脚本把TF卡未分配空间划分给第三分区。当出现”OMV login:” 说明OMV已经完全启动了。对应找到“My IP address is 192.168.xxx.xxx”记下。

2.登录WebUI:在PC端用浏览器(非IE内核,否则页面加载不正常。我用的360极速)打开刚才的IP地址192.168.xxx.xxx,会进WebUI,
选择语言:简体中文
用户名:admin
密 码:openmediavault
点击登录 按钮

3.修改端口,运行后会莫名的80端口无法访问,所以最好改成其它端口(我用82),改完点保存。应用完成生效。

4.修改时间。如果已经改完端口,这时刷新的面是不能正常访问的,要在IP后面加端口号(192.168.xxx.xxx:82)
时区-Asia/Shanghai (亚洲/上海,东八区和中国同时区就好),其他默认,保存->应用

5.登录SSH,打开 PuTTY ,输入IP,端口,点Open,在打开的命令行窗口提示下输入
用户:root
密码:openmediavault   (输入时不会显示任何字符)
当出现root@OMV:~#  时说明登录成功,可以做任何你想得到的操作,前提是你会。不然就去打相关教程好了。

 

四.插件安装(略)

五.备份

做一个备份是好习惯,如果已经用漫长的时间做好基本设置,装好了各种所要用的插件后,在你做各种尝试性操作时,让系统崩溃,而又无从修复时,从备份还原,可以减少很多时间。
1.软关机。点完关机后10s左右,树莓派网卡的灯会熄掉,就说时已经关机了。软关机后,正常的树莓派是不能再次软开机的,只能重新通电的方式开机。

2.从树莓派上取下TF卡,用读卡器连接电脑,打开Win32DiskImager,在Image File 里选择一个位置,并输入文件名.img(xxx.img),在Device选择TF卡的盘符,点 Read,等待Successful(成功)。将备份好的IMG保存好,在需要还原时,参考 “二.刷系统” 操作。

六.挂载移动硬盘

OMV不支持EXT2,3,extFat,所以最好用ext4或NTFS,如果用Fat32可能会在设置权限时出错。
1.格式化移动硬盘。如果用NTFS或Fat,并且硬盘已经是这种分区格式,直接USB连到树莓派上即可。
NTFS/Fat: WinXP/Win7、8、10系统,我的电脑–管理–磁盘管理–建立分区–格式化  ext4:Win系统不能直接格式化,DiskGenius也只能格成ext2。有谁会用DG格ext4请授教。
PuTTY 远程:   对硬盘分区  fdisk /dev/sda
要把分区格式化成Linux Ext4格式,用: mkfs.ext4 /dev/sda?   要把分区格式化成FAT32格式,用: mkfs.vfat -F 32 /dev/sda?
要把分区格式化成NTFS 格式,用: mkfs.ntfs /dev/sda?   —————–sda?  里的“?”是对应分区编号。
如果要用一块硬盘挂载几种不同格的分区,建议先在PC端分成可识别的几种分区,再到SSH,对所需要的分区      格成ext4格式。
如果在WebUI–磁盘管理–擦除,会抹去整张硬盘数据,重新分成并格式化为ext4的一个分区。谨慎操作!!

2.挂载分区
如果硬盘已经正常连接,会在WebUI–磁盘管理–看到对应的硬盘。
点开WebUI–文件系统,分区会自动挂载,如果没有,就选定分区,手动点挂载。

最后,开始使用你的 OpenMediaVault 吧。

本文来自 噪音爵士 的推荐,原文

本文转载自:树莓派实验室

树莓派3 的 64位 Ubuntu 17.04 评测

本文和测试数据来自 chainsx 的推荐。为了避免标题党嫌疑,把原文标题中的倍数略去了,但从数据上看确实有很大幅度提升,最高指标超官方系统60倍。

为了证明树莓派3与ubuntu-17.04的arm64系统更搭配,我用ubuntu64-rpi里的基于f2fs文件系统的ubuntu-17.04-arm64进行了系统评测。

在树莓派实验室里有一篇《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》,可是,他是使用的预览版debian9进行评测,我这里使用的是ubuntu-17.04-arm64,可以说,这次评测是一次相当成功的评测,评测数据可以在ubuntu64-rpi项目主页内找到,这里,也会附出。

关于F2FS文件系统我也不再介绍,在《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里也已介绍,

硬件测试环境:

  • RaspberryPi 3 Model B
  • 16GB Class 10 TF卡
  • 5v 2.5A电源
  • 以太网网线及能连外网路由设备

软件测试环境:

  • ubuntu64-rpi(使用ubuntu-17.04-arm64 非移植版,由源码构建)
  • sysbench 压力测试软件

这里,为了确保可比较性,我使用的评测工具和《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里一样

sudo apt-get update && sudo apt-get –y install sysbench htop iperf3

测评结果点击这里查看(直接保存的ssh记录,如有疑问请自测,系统已放出)

总结一下:

  • cpu单线程:12.4798
  • cpu4线程:31.1217
  • cpu8线程 31.0916
  • 八线程测试共享线程锁 14.9217
  • 连续读写 0.3604
  • 随机文件读写 0.5636
  • 互斥锁测试 0.0184
  • 内存连续测试 1.2890
  • 内存随机测试 0.9564

这里,使用《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里提供的raspbian的数据进行比较(由于我目前没有过多时间来进行对最新版raspbian的评测,这里直接引用该文章提供的数据,这里,感谢该文章作者提供的数据。)

测试项目 Raspbian2017-03-03 ubuntu-17.04-arm64(ubuntu64-rpi) 提升倍数
系统信息 Arm 32bit/ext4文件系统 Arm64bit/f2fs文件系统 见文件系统测试
CPU单线程 367.2971 12.4798 29倍
四线程 1017.6742 31.1217 31倍
八线程 1920.0601 31.0916 62倍
内存随机 5.7678 0.9564 6倍
内存连续 6.3309 1.2890  5倍
文件连续读写 5.7655 0.3604 15倍
随机读写 不支持 0.5636
互斥锁性能 0.0231s 0.0184s 1.2倍

这里我们看到,测试结果让我们大吃一惊,我们的ubuntu-17.04-arm64超官方60倍,我相信,树莓派官方系统仍在不停的改进,测试结果可能与现在的最新版raspbian有出入,但是,我们这里强调的是64位系统的优越性,由此可见,64位系统的却发挥了其应有的优势。

以上测试并非使用64位官方系统,但能够让大家看到软硬件匹配64位之后,树莓派性能上的提升潜力。作为树莓派爱好者,一起期待官方发布64位系统吧!

附上系统项目地址 https://github.com/chainsx/ubuntu64-rpi

本文来自:树莓派实验室

 

 

 

树莓派安装 Arduino IDE 进行 Arduino 开发

Arduino 与 树莓派是 Maker 们创作的两大利器。在接触树莓派之前,我们通常是在 PC 上安装 Arduino 的 IDE 进行 Arduino 开发,而今有了树莓派,PC 的在 Arduino 开发中所起的作用将被树莓派替代了,现在可以直接在树莓派上安装 Arduino IDE 进行 Arduino 开发。下面来介绍具体方法。

由于 Arduino IDE 是图形界面的,所以不用说你的树莓派需要是图形界面版本而非 Lite、Core 版。

一、安装 Arduino IDE

直接命令行安装最简单:

sudo apt-get install arduino

之后主菜单中会出现 Arduino IDE 的菜单。

二、连接 Arduino 开发板

1、通过 USB 将 Arduino 开发板和树莓派连接起来,同 Arduino 连接 PC 一样。
因树莓派 USB 口限流,将 Arduino 板的供电接口同时外接 9-12V 的电源适配器供电更好。

2、配置通信端口
菜单:Tools -> Port:”/dev/ttyxxx” -> 选择”/dev/ttyACM0″

 

 

3、编译测试
菜单:File -> Examples -> 01.Basics -> Blink

点击工具栏 Upload 按钮,将自动完成编译后并下载到板子上,看到界面下方出现 “Done uploading” 即可。

本文来自:树莓派实验室