RK3588使用笔记:系统算法依赖库安装
一、前言
嵌入式设备随着需求的提升,不再仅仅只只运行个单机程序那么简单了,社会发展设备升级,都会逐步引用人工智能,涉及到算法模型,这里基础的部分就是算法环境的安装,有的算法是C++,大部分算法是python环境下,本文核心就是安装匹配python算法模型需求的各种环境
目录
一、前言
二、环境
三、正文
1.安装python及相关依赖库
2.常用python工具包pip在线安装命令
3.算法模型运行测试
四、结语
二、环境
RK3588(linux5.10.66+debian/ubuntu/麒麟是桌面文件系统)
调试笔记本window10,安装常用工具winscp,xshell,finalshell,secureRTP等等
VMware17+Ubuntu20.04源码开发环境(这里就依赖于各个硬件平台的厂家提供资料了)
三、正文
首先列出我已经安装好的模型列表requirements.txt
absl-py==2.2.1
astunparse==1.6.3
async-timeout==5.0.1
blinker==1.4
cachetools==5.5.2
certifi==2025.1.31
chardet==3.0.4
charset-normalizer==3.4.1
contourpy==1.1.1
cryptography==2.8
cupshelpers==1.0
cycler==0.12.1
dbus-python==1.2.16
defer==1.0.6
distro==1.4.0
distro-info===0.23kylin1
dnspython==1.16.0
entrypoints==0.3
flatbuffers==25.2.10
fonttools==4.55.3
gast==0.4.0
google-auth==2.38.0
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
greenlet==3.1.1
grpcio==1.70.0
h5py==3.11.0
httplib2==0.14.0
idna==3.10
importlib_metadata==8.5.0
importlib_resources==6.4.5
joblib==1.4.2
keras==2.10.0
Keras-Preprocessing==1.1.2
keyring==18.0.1
kiwisolver==1.4.7
language-selector==0.1
launchpadlib==1.10.13
lazr.restfulclient==0.14.2
lazr.uri==1.0.3
libclang==18.1.1
Markdown==3.7
MarkupSafe==2.1.5
matplotlib==3.7.5
numpy==1.24.4
oauthlib==3.2.2
onboard==1.4.1
opt_einsum==3.4.0
packaging==24.2
pandas==1.2.0
pillow==10.4.0
protobuf==3.19.6
pyasn1==0.6.1
pyasn1_modules==0.4.2
pycairo==1.16.2
pycrypto==2.6.1
pycups==1.9.73
PyGObject==3.36.0
PyJWT==1.7.1
pyparsing==3.1.4
pysmbc==1.0.15.6
python-apt===2.0.0kylin2
python-dateutil==2.9.0.post0
python-debian===0.1.36kylin1
pytz==2025.2
pyxdg==0.26
PyYAML==5.3.1
redis==5.2.1
requests==2.32.3
requests-oauthlib==2.0.0
requests-unixsocket==0.2.0
rsa==4.9
scikit-learn==1.3.2
scipy==1.10.1
seaborn==0.9.0
SecretStorage==2.3.1
simplejson==3.16.0
six==1.17.0
some-package==0.1
tensorboard==2.10.1
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.10.0
tensorflow-cpu-aws==2.10.0
tensorflow-estimator==2.10.0
tensorflow-io-gcs-filesystem==0.35.0
termcolor==2.4.0
threadpoolctl==3.5.0
typing_extensions==4.13.0
tzdata==2024.2
ubuntu-drivers-common==0.0.0
urllib3==2.2.3
wadllib==1.3.3
Werkzeug==3.0.6
wrapt==1.17.2
xkit==0.0.0
zipp==3.20.2
1.安装python及相关依赖库
目前银河麒麟系统自带python3.8.10,无需升级,暂时使用此版本,也可以手动安装一个新的版本python,前提是有网,离线安装很困难。
但此本版没有依赖库,需要安装pip包管理工具,安装方法如下:
安装pip
1.联网,首先验证网络能够正常连接sudo apt-get update,安装python3.8基础依赖
sudo apt-get install python3.8-distutils python3.8-dev
2.麒麟系统默认已经安装了python3.8.10但是没有其他的依赖库,需要安装pip做为开始
3.查看可以安装的pip版本apt-cache madison python3-pip可能支持的版本很低,没关系先安装在升级
4.在线命令更新sudo apt-get install python3-pip安装的版本可能比较低,或者比较高不是需要的指定版本
5.升级pip命令安装指定版本
python3.8 -m pip install --upgrade pip==24.2 -i https://mirrors.aliyun.com/pypi/simple/
6.验证pip安装情况
pip list
python3.8 -m pip --version
pip -V
7.永久配置镜像源
mkdir -p ~/.pip
echo -e "[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com" > ~/.pip/pip.conf
查看pip是否换源成功
cat ~/.pip/pip.conf
卸载pip
#卸载系统 apt 安装的
sudo apt-get remove python3-pip
sudo apt-get autoremove
#卸载用户级安装的
python3.8 -m pip uninstall pip setuptools
#删除所有残留的可执行文件
rm -f /usr/local/bin/pip* /usr/bin/pip* ~/.local/bin/pip*
#删除配置和缓存
rm -rf ~/.pip ~/.cache/pip
卸载python
sudo apt-get remove python3
sudo apt-get autoremove
sudo apt-get remove python3.8
sudo apt-get autoremove
sudo apt-get remove python3.9
sudo apt-get autoremove
其中,比较常用的国内镜像还包括:
1. 阿里云源
pip install -i https://mirrors.aliyun.com/pypi/simple/ [package_name]
2. 豆瓣源
pip install -i https://pypi.doubanio.com/simple/ [package_name]
3. 清华大学源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ [package_name]
4. 华为云源
pip install -i https://mirrors.huaweicloud.com/repository/pypi/simple/ [package_name]
5. 中国科技大学源
pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ [package_name]
这些源都是基于国内的镜像站点提供的,使用这些源可以加快包的下载速度并解决连接问题。你可以根据自己的网络环境选择其中一个源,并将其作为 -i 参数传递给 pip 命令来使用。
2.常用python工具包pip在线安装命令
参照上个文档我们已经安装好了指定版本的python和pip,接下来就是按照指定版本安装相关依赖环境了,所示参照windows开发好的模型去匹配环境,一定要先确保python和pip版本一致,之后在逐步安装其他依赖环境
指定版本:
pip install numpy=1.19.1
pip --default-timeout=100 install numpy=1.19.1(防超时,设置超时时间)
pip install -i Simple Index numpy=1.19.1(使用指定源,更快,前面已经换过pip源这里就不用加了)
指定版本不行就添加 --no-binary 参数,避免二进制兼容问题
pip install numpy=1.19.1 --no-binary
在不行就去掉版本安装最新版本:
pip install numpy
升级numpy:
pip install --upgrade numpy
卸载numpy:
pip uninstall numpy
查看numpy的版本:
import numpy
print(numpy.__version__)
查看numpy的安装位置:
pip show numpy
以上命令中,pip是Python的包管理工具,numpy是要安装或管理的Python包。
在已知需求资源包requirement.txt内容时,可以通过下面pip命令快速安装相关依赖库
pip install -r requirements.txt
pip install -i Simple Index -r requirements.txt(使用指定源,更快,前面已经换过pip源这里就不用加了)
实在装不上的库尝试下列方法
sudo apt install python3-h5py
如果遇到兼容性问题(特别是aarch64架构)添加 --no-binary 参数
先安装必要依赖sudo apt-get install libatlas3-base libopenblas-base
强制从源码构建(避免二进制兼容问题)python3.8 -m pip install numpy==1.19.1 --no-binary numpy -i https://mirrors.aliyun.com/pypi/simple/
说明:使用 python3.8 -m pip 确保调用的是 Python 3.8.10 绑定的 pip,如果安装多个python版本,建议使用python3.8 -m pip install numpy==1.19.1这种方式
保存版本:生成 requirements.txt(记录所有指定版本)
python3.8 -m pip freeze > requirements.txt
PS:安装某些特殊的包
tensorflow:
先安装一些依赖
sudo apt-get update
sudo apt-get install -y \
python3-dev \
python3-pip \
gcc \
g++ \
make \
libhdf5-dev \
libblas-dev \
liblapack-dev \
pkg-config
依赖h5py先安装
python3.8 -m pip install --pre --extra-index-url https://snapshots.linaro.org/ldcg/python-cache/ h5py
安装tensorflow(特定版本匹配算法模型,否则白装)
python3.8 -m pip install --default-timeout=6000 tensorflow
指定版本
卸载之前(如需) pip uninstall tensorflow
python3.8 -m pip install --upgrade --force-reinstall \
tensorflow==2.10.0 \
tensorflow-estimator==2.10.0 \
-i https://mirrors.aliyun.com/pypi/simple/
3.算法模型运行测试
requirement.txt列表内环境(在产品状态已经固化时使用txt列表环境安装,在调试测试阶段建议直接安装好python和pip,运行模型缺什么库就在线安装什么,会自动匹配库版本,否则txt内库不一定与模型匹配,也不一定与设备内部环境匹配,会一直安装错误报错)
测试我做的python测试程序
测试pytest_local_time.py
import datetime
import time
def display_local_time():
"""持续显示本地时间"""
print("本地时间显示程序 (按Ctrl+C停止)")
print("----------------------------")
try:
while True:
# 获取当前本地时间
current_time = datetime.datetime.now()
# 格式化输出
print(f"\r当前时间: {current_time.strftime('%Y-%m-%d %H:%M:%S')}", end="", flush=True)
# 每秒刷新一次
time.sleep(1)
except KeyboardInterrupt:
print("\n程序已停止")
if __name__ == "__main__":
display_local_time()
执行python pytest_local_time.py
结果:
测试pytest_pandas_numpy.py
import numpy as np
import pandas as pd
def test_pandas_numpy():
"""测试 Pandas 和 Numpy 功能的简单程序"""
print("=== Pandas 和 Numpy 测试程序 ===")
# 1. 测试 Numpy 功能
print("\n1. Numpy 测试:")
# 创建一个 numpy 数组
arr = np.array([1, 2, 3, 4, 5])
print(f"创建的数组: {arr}")
print(f"数组平均值: {np.mean(arr)}")
print(f"数组标准差: {np.std(arr)}")
# 2. 测试 Pandas 功能
print("\n2. Pandas 测试:")
# 创建一个简单的 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Score': [85.5, 92.3, 88.9]
}
df = pd.DataFrame(data)
print("创建的 DataFrame:")
print(df)
# 3. 测试两个库的交互
print("\n3. Pandas 和 Numpy 交互测试:")
# 在 DataFrame 中添加一列 numpy 计算的结果
df['Score_Scaled'] = df['Score'].values * 0.8 + 20
print("添加计算列后的 DataFrame:")
print(df)
print("\n所有测试完成!")
if __name__ == "__main__":
test_pandas_numpy()
执行python pytest_pandas_numpy.py
结果:
测试pytest_mostenv.py
import sys
import importlib
from termcolor import colored
# 需要测试的包列表
PACKAGES_TO_TEST = [
('absl-py', None),
('astunparse', lambda: astunparse.unparse(ast.parse("x = 1"))),
('async_timeout', None),
('cachetools', None),
('certifi', None),
('charset_normalizer', None),
('contourpy', None),
('cycler', None),
('fonttools', None),
('gast', None),
('google.auth', None),
('google.auth.oauthlib', None),
('google.pasta', None),
('greenlet', None),
('grpcio', None),
('h5py', lambda: h5py.__version__),
('idna', None),
('importlib_metadata', None),
('importlib_resources', None),
('joblib', None),
('keras', lambda: keras.__version__),
('keras_preprocessing', None),
('kiwisolver', None),
('markdown', lambda: markdown.markdown("**test**")),
('markupsafe', lambda: markupsafe.escape("<html>")),
('matplotlib', lambda: matplotlib.__version__),
('numpy', lambda: numpy.array([1, 2, 3]).sum()),
('oauthlib', None),
('opt_einsum', None),
('packaging', None),
('pandas', lambda: pandas.Series([1, 2, 3]).mean()),
('PIL', lambda: PIL.__version__), # Pillow
('pip', lambda: pip.__version__),
('protobuf', lambda: protobuf.__version__),
('pyasn1', None),
('pyasn1_modules', None),
('pyparsing', None),
('dateutil', lambda: dateutil.__version__), # python-dateutil
('pytz', lambda: pytz.utc.zone),
('yaml', lambda: yaml.safe_dump({"test": 1})), # PyYAML
('redis', None),
('requests', lambda: requests.__version__),
('requests_oauthlib', None),
('rsa', None),
('sklearn', lambda: sklearn.__version__), # scikit-learn
('scipy', lambda: scipy.__version__),
('seaborn', lambda: seaborn.__version__),
('setuptools', lambda: setuptools.__version__),
('six', lambda: six.__version__),
('some_package', None),
('tensorboard', lambda: tensorboard.__version__),
('tensorboard_plugin_wit', None),
('tensorflow', lambda: tensorflow.__version__),
('tensorflow_estimator', None),
('termcolor', lambda: termcolor.colored("test", "red")),
('threadpoolctl', None),
('tzdata', None),
('urllib3', lambda: urllib3.__version__),
('werkzeug', lambda: werkzeug.__version__),
('wheel', lambda: wheel.__version__),
('wrapt', None),
('zipp', None)
]
def test_package(package_name, test_func=None):
"""测试单个包是否能正常导入和使用"""
try:
# 动态导入包
module = importlib.import_module(package_name.replace('-', '_'))
globals()[package_name.replace('-', '_')] = module
# 如果有测试函数则执行
if test_func:
test_func()
return True, None
except Exception as e:
return False, str(e)
def main():
print(colored("=== 开始环境依赖测试 ===", "green", attrs=["bold"]))
print(f"Python 版本: {sys.version}\n")
results = []
total = len(PACKAGES_TO_TEST)
success = 0
for package, test_func in PACKAGES_TO_TEST:
# 特殊处理某些包的导入名称
display_name = package
if package == 'PIL':
display_name = 'pillow'
elif package == 'yaml':
display_name = 'PyYAML'
elif package == 'sklearn':
display_name = 'scikit-learn'
elif package == 'dateutil':
display_name = 'python-dateutil'
ok, error = test_package(package, test_func)
status = colored("✓ 成功", "green") if ok else colored(f"✗ 失败: {error}", "red")
results.append((display_name, status))
if ok:
success += 1
# 打印结果表格
print("\n" + colored("测试结果:", "cyan", attrs=["bold"]))
for name, status in results:
print(f"{name.ljust(25)} {status}")
# 汇总统计
print("\n" + colored("测试汇总:", "cyan", attrs=["bold"]))
print(f"总包数: {total}")
print(f"成功: {success}")
print(f"失败: {total - success}")
print(colored(f"成功率: {success/total*100:.2f}%", "green" if success == total else "yellow"))
if success == total:
print(colored("\n所有依赖包测试通过!", "green", attrs=["bold"]))
else:
print(colored("\n部分依赖包测试失败!", "red", attrs=["bold"]))
if __name__ == "__main__":
main()
执行python pytest_mostenv.py
结果:
测试实际项目算法测试程序
将predict文件夹的BIlstm.py和data2.csv放入目标机中
执行python BIlstm.py
结果:
报错
Tensorflow版本不能超过2.13,卸载安装2.10.0版本
再次测试执行python BIlstm.py
可以看见一直再跑数据
最后这个模型就不公开了,保密要求,其实测试AI生成的py程序,测试环境就ok了
四、结语
算法环境是基础
环境安装好了再去研究如何使用
方法就有很多了,可以只运行python程序,可以结合qt程序或其他程序,可以使用redis中间件做数据信息同步转发等等。