树莓派鼠标电脑了解一下?

​hi,大家好,今天看到一个国外牛人用树莓派结合3D打印机制作了一款小巧的鼠标电脑,如下图:

TIM截图20190117113239.jpg

换个角度再看一下:

TIM截图20190117113338.jpg

屏幕看上去很小,感觉看起来比较费劲,但是直接集成在鼠标上也是非常酷的操作啊!这波操作可以说是很6了。

那么有人会说没有键盘怎么操作啊??

TIM截图20190117113520.jpg

原来它被藏在鼠标的内部了,白色外壳拉出来就是键盘了,呃, 怎么感觉这么反人类呢,横着怎么打字? 不过歪果仁脑洞大是出了名的。我们就忍了吧。

TIM截图20190117113656.jpg

右下角这个开关电源是不是显得很大气啊?哈哈,我觉得手大的人会误操作。

TIM截图20190117113834.jpg

外壳的制作是使用fusion360的,据说很好用,有兴趣的可以自我尝试。

TIM截图20190117114002.jpg

单手操作的姿势是这样的,另一只手就可以拿着手机拍照了么?不知道做这个的初衷是什么?知道的小伙伴评论区见。

操作界面是这个画风:

TIM截图20190117114223.jpg

屏幕很小,看字打游戏都有点儿困难,但是很迷你的小玩意儿总是会吸引一部分人注意,我是觉得听好玩儿的。看这个DIY的大小,我推断鼠标外壳的下面藏着的是树莓派zero的板子,一个迷你小键盘。这个屏幕看上去是tft2.2非触摸屏,

然后如果想要打字,是这样的:

TIM截图20190117114536.jpg

如果玩儿我的世界, 得用个放大镜看比较舒服。。。

TIM截图20190117114618.jpg

这样的项目,大概用个三五天就可以完成了,大家可以猜测一下它的这个项目都用了什么器件?

可以在评论区留言哟!

另外,年前有一大波piboxy来袭,快去抢购, 抢购链接猛戳这里:

piboxy购买链接

TIM截图20190117134045.jpg

树莓派+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

本文来自:树莓派实验室

3000核!用750张树莓派挑战最经济超算

国家耗数亿元巨资打造的天河、太湖之光等超级计算机,使中国得以在超级计算机排名中长期霸榜。不过除了砸大钱盖超级计算机之外,美国国家实验室则是选泽了更节省成本的方式,来打造超级计算机,利用750片树莓派开发板组成的运算丛集,成功打造出一台更省钱的超级计算机,未来更要扩大至1万个节点扩充,挑战挤进全球百大Peta级超级计算机排名。目前这套HPC系统已经实际展开测试,未来也将用于科学研究之用。这台树莓派超级计算机本周也在美国丹佛举行的2017超级计算机展上公开展出 。

这套系统藉由5套每个包含150张Raspberry Pi 3 B的6U机箱模块构成,且由于Raspberry Pi 3 B搭载了64位的四核心ARMv8 1.2GHz,高达750张Raspberry Pi 3 B也意味著有超过3000个以上的核心,足以满足特定超级计算机的多核需求。

值得一提的是,Raspberry Pi 3 Model B的国内售价为240元左右,所以750张树莓派组成的超级计算机售价大概为18万元,这对于一台拥有3000核心以上的超级计算机来说已经是最低价格了。

其实利用树莓派来打造超级计算机,早已不是新鲜事。火柴盒大小外型的树莓派,因为具备有迷你电脑的功能,2012年一推出就十分受到欢迎,甚至还掀起了一股自造者(Maker)风潮。一台千元有找的树莓派开发板,因为价格便宜,不只成为许多新创公司开发及验证产品的首选,这股DIY热潮甚至也蔓延到科学界,开始有人将它用在科学研究,例如,2012年就有美国树城州立大学博士生Joshua Kiepert用32个树莓派组成运算丛集,成本不到2,000美元。

后来,更有英国南安普敦大学一名电脑工程师,使用64个树莓派和乐高积木,来打造出超级计算机Iridis-Pi,成本只花不到台币13万元。这次由美国能源部两大国家实验室之一的洛斯阿拉莫斯国家实验室( Los Alamos National Laboratory)自建的树莓派超级计算机,使用的树莓派更是当时数量的10倍,多达成750片树莓派开发板组成的运算丛集。

用750片树莓派打造世界级的超级计算机

洛斯阿拉莫斯国家实验室自建的超级计算机,主要采用BitScope提供的模组式刀锋机柜来搭建,因为全采用树莓派开发板来设计超级计算机,所以成本上也比一般超级计算机还便宜,甚至使用上也更省电,每个运算节点平均耗电只有2到3瓦而已。

根据洛斯阿拉莫斯国家实验室高效能运算部门负责人Gary Grider表示,这个树莓派超级计算机系统内,总共内建750个CPU计算节点(采用1.2 GHz Quad Core ARMv8处理器),拥有高达3,000颗核心可供计算使用,已经具备有等同超级计算机的计算能力。该实验室未来还要扩大规模挑战1万个,甚至最多5万个节点扩充,单以运算效能来看,理论上,跟自家的Grizzly超级计算机系统(全球排名85,运算效能达到1.5 PFLOPS)相比,将毫不逊色,甚至比台湾国网中心自行研发排行全球95名的Peta超级计算机(运算效能有1.325PFLOPS)都还快。

不只目标要挤进前百大,这台树莓派超级计算机的建置成本,比起一般超级计算机还更加便宜,虽然Gary Grider并未透露实际的建置成本,但若以他们使用的Raspberry Pi3 Model B(售价35美元)来计算的话,750个树莓派加总成本差不多2万6千美元(约台币78万元),即使在加上其他的基础建置费用,还是远比一般动辄上亿美元的超级计算机建置成本低许多。

Gary Grider表示,开发人员可以利用树莓派的模组及软体,在超级计算机上来编写应用,而不需要花费数亿美元购买高成本的软硬体,来搭建HPC测试平台,而且更耗电,需要数百万瓦(MW)的电力才可供系统正常运作。 Gary Grider也透露,他们自建的树莓派超级计算机,每个运算节点平均耗电只有2到3瓦,即使是将750个节点全部加总起来,耗电量也远低于目前许多的超级计算机,不只省钱也省电,而且系统还可以依需求弹性扩充。

树莓派超级计算机的机箱共有5个刀锋模组组成,每个模组可以装下150片树莓派开发板,上图为其中一个刀峰模组,并经由乙太网路连接,来建立运算丛集,机箱内也整合交换器,还配备一组48伏特的电源供应器设备来供电。

然而,要用数千到数万台树莓派组出一台Peta级的超级计算机,并不是件容易的事,因为随着运算丛集规模变大,不同运算节点和节点之间连接和传输也将变得更加复杂,而容易造成存取延迟与传输频宽不足的问题,而影响了系统的效能,这也是系统扩充的挑战。即使是洛斯阿拉莫斯国家实验室一开始,也只能扩充到最多40个运算节点,后来,他们找来了HPC厂商BitScope及SICORP共同合作,重新设计机箱和进行系统整合,来解决系统扩充的难题,才从原来最多40个节点,增加到144个,到现在的750个节点,未来还要挑战数千到数万个节点的扩充。

根据SICORP网站的介绍,树莓派超级计算机是采用BitScope提供的模组式刀锋机柜来搭建,机箱内由5个刀锋模组组成,每个模组一次最多可以装入150片树莓派开发板,这些运算模组可以经由乙太网路连接,来建立运算丛集,机箱内也整合网路交换器,还配备一组48伏特的电源供应器设备供电。

不过,Gary Grider也强调,这台树莓派超级计算机并非用来取代其他超级计算机,而是希望当作提供给开发人员,及研究者,另一个可用于研究测试及验证的全新HPC运算平台,不只具备高效能计算能力,而且更便宜。他也表示,未来除了会持续增加节点数量,来提高运算效能外,也将建立新的网路架构,并且结合引入( bootstrap)、管理及灾难复原的演算法,以及聚焦系统与分散式储存研究等。

本文来自:http://shumeipai.nxez.com/2017/11/22/750-raspberry-pi-challenge-the-most-economical-super-computing.html

 

用Make来入门简单的并行计算

我们已经习惯于听到说树莓派改革了原有的教育和创客社区,但事实上树莓派2的开发过程中,他同时参与了计算机历史上另一个改革浪潮:从单核计算机到多核计算机的转变。

这会在最根本的程度上改变我们写程序的思维,树莓派2和3上面都搭载着一个四核的处理器,四核也就意味着可以同时运行四个任务;理论上来说,对于同一个程序而言这让我们可以有四倍于过去的速度,但是实际上我们很难去使用去真正地发挥这个多出来的计算资源。在这篇文章中,我们会稍稍地介绍一个最简单的使用树莓派四核性能的并行计算的方法。

本文由KnownCold翻译自MagPi第52期

三核处理器的早餐1

 

在我们开始写程序之前,我们先来看一下我们每天都会做的一件事:做早饭。如果我们尝试着去描述一下这个做早饭过程,那么他看起来可能是右图这样的一个列表。

 

这个列表呢,他是一个很明显的顺序执行的程序,他包括了所有做早饭的必要的工作,但是还遗漏了一些重要的事情。事实上,我们永远不会像这个列表一样照着这个顺序一个一个任务地做下去,我们会同时地做几件事情,比如我们可以同时煮水和烤面包片;当然也会有一些事情不能同时做,比如只有当你煮完水才能泡茶喝。

 

所以我们可以换一种方式来描述这个做早饭的任务,就像下面这个图一样:

2

我们从上而下的做这些小任务,当每一个上面的任务做完之后,我们就能接着做他下面的那个任务,显然地,这样做起来速度会比前一种列表的顺序快很多。

当然,不是所有的任务都可以分解成小任务,也不是所有的小任务可以这么并行地来完成。

使用Make

那么在树莓派2和3上,我们怎么来做到类似的分解任务,然后并行运行呢?

Raspbian这个操作系统上,原生的就有一个程序叫做Make,这个程序按照一个有依赖的任务列表,按一定的顺序来执行每项任务,恰好他支持在树莓派上的并行计算。

Make这个程序本身一开始被设计为给C语言或者C++语言这些需要编译源代码的程序语言提供各种依赖和编译的顺序,而现在他也支持执行各种只要能够被他描述的有依赖性的任务。想要使用Make,我们需要编写一个makefile来描述每项任务之间的依赖,作为一个例子,我们会写一个程序,用来把一堆图片的缩略图拼凑成一个大图,这个程序可以用来处理大量的图片文件,比如在一个服务器上处理大量图片,我们就能粗略地查看一下这些缩略图了。

除了Make,我们还要使用一个叫做ImageMagick的程序来转换图片,用下面的Bash代码来确保我们的程序里面已经有ImageMagick和Make了:

[bash]sudo apt-get update
sudo apt-get install make imagemagick[/bash]

我们打算先使用Make来生成每张原始图片的缩略图,最后再把他们拼凑起来,这个程序的主要工作就在于生成缩略图,依赖图如下所示:

3

这个图展示了缩略图、原始图和最后的拼图之间的关系,因为每个缩略图的生成过程都是独立进行的,所以我们可以让树莓派的四个核同时投入生成缩略图的这个工作,然后当缩略图都生成完全的时候,就可以进行下一步生成拼图了。

Makefile 的编写规则

Makefile文件是我们用来描述所有任务和他们之间的依赖关系的,首先,他定义了任务相关的原始图片和缩略图的列表,然后我们在图里定义了两个依赖规则。第一个规则描述了如何从原始图片生成缩略图:“fullsize”这个文件夹里面所有的图片都要通过“convert”这个命令来转换成“thumbs”文件夹里面的同名文件。需要注意的是,包含命令的那几行必须要用tab键的缩进开头;第二个规则是明确了最后的拼图必须依赖于前面的所有缩略图,使用了”montage”命令来创建拼图并显示。我们已经告诉Make哪些命令用来缩小尺寸,那些命令用来拼凑图片,但是我们还没有明确一个执行的顺序,Make会自己计算出一个合适的顺序,毕竟我们已经从一个单一顺序的程序描述转换成描述并行任务和互相的依赖了,系统已经能自己想出最合适的最高效的执行顺序了。

这次的makefile如下:

[bash]
# Thumbnail size in pixels
SIZE = 128×128

# The list of original photos to use (fullsize/* refers to all files
# in the directory fullsize)
ORIGINALS = $(wildcard fullsize/*)

# Use the list of originals to build a list of thumbnails (this takes
# the list of originals and changes the prefix on each file from
# ‘fullsize’ to ‘thumbs’)
THUMBS = $(ORIGINALS:fullsize/%=thumbs/%)

# RULE 1: Generate each thumbnail from its original using the convert
# utility from ImageMagick, rotating the image if necessary
thumbs/% : fullsize/%
convert $< -thumbnail $(SIZE) -auto-orient $@

# RULE 2: Combine all the thumbnails into the montage and display it
montage.jpeg: $(THUMBS)
montage $(THUMBS) montage.jpeg
display montage.jpeg &

# Clean up all thumbnails and delete the montage
clean:
$(RM) thumbs/* montage.jpeg
[/bash]

 

最简单的运行方法就是运行

[bash]make[/bash]

这会启动Make程序,然后读取我们在makefile里面写完了的相应规则,并开始按照正确的顺序执行命令;但是,Make一开始会假定可用的处理器核心只有一个,也就是说仍然一个一个的慢慢地执行下去。当然我们可以很方便告诉Make我们有四个核:

[bash]make -j4[/bash]

这个命令明确了Make会同时执行四个任务,所以通过这种方法的话,我们的程序速度会是之前的四倍左右,现在让我们在“fullsize”文件夹里面添加一些新的图片然后运行Make吧,它可以检查每个文件的时间戳,确定哪些工作是必要,哪些工作是不需要做的(假如之前生成过一次缩略图,第二次就不需要重复了),这也就意味着,在Make运行到一半的时候,我们可以随意的中断,然后下一次继续。

运行下面的命令就会

[bash]make clean[/bash]

就会清空所有的缩略图和拼图。