1. 项目概述与核心价值
每次换新手机后,那台旧设备往往就成了抽屉里的常驻居民。作为一名折腾过十几台旧设备的极客,我发现这些被淘汰的机器其实都还有着不错的性能表现。最近用Python+Termux打造的这个PhonePhoenix项目,成功让我的旧小米6焕发新生,现在它已经成为我家里的智能中枢,每天负责播放音乐、看护宠物,还能随时陪我聊天。
这个方案最吸引人的地方在于完全开源免费,而且所有功能都集中在一个简洁的Web界面里管理。你不需要购买任何智能音箱或监控设备,只要有一台能正常开机的安卓手机(Android 7.0以上),跟着我的步骤操作,两小时内就能搭建完成。实测运行半年多,日均内存占用不到500MB,比很多商业解决方案都轻量。
2. 环境准备与工具选型
2.1 硬件选择建议
我测试过从红米Note 4X到三星S20多款机型,总结出几个选机要点:
- 优先选择支持OTG供电的机型(避免电池鼓包风险)
- 摄像头完好的中端机最适合(如小米6、华为P20)
- 2GB内存是底线,4GB更佳(语音识别时内存占用会飙升)
特别提醒:长期插电使用时,建议卸掉电池或使用充电保护插座。我的一台荣耀8就因持续充电导致电池膨胀,把后盖都顶开了。
2.2 Termux环境配置
官方F-Droid仓库的Termux版本最稳定,按这个顺序安装:
pkg install git python pulseaudio termux-api sox ffmpeg几个关键包的作用:
- pulseaudio:音频服务核心
- termux-api:硬件调用桥梁
- sox:音频处理(降噪、格式转换)
- ffmpeg:音乐文件解码
遇到包冲突时,先运行:
pkg upgrade pkg clean3. 核心功能实现细节
3.1 语音助手模块
唤醒机制优化
原始代码使用简单的语音能量检测,我在实践中发现这些改进很有效:
- 增加静音检测阈值动态调整
# 在assistant.py中修改 noise_floor = np.mean(np.abs(audio_data[-2000:])) * 1.5 # 动态基线 if current_volume > noise_floor * 3: # 触发阈值 start_recording()- 双唤醒词验证(防误触发)
if wake_word in text and confirm_word in text: # 如"小爱同学""在呢" process_command()音频响应策略
在config.json中可以配置多级响应:
"audio_commands": { "播放音乐": {"file": "play.mp3", "tts_backup": true}, "停止": {"file": "stop.mp3", "tts_backup": false} }我的经验是高频指令用预录音频(响应快),长文本用TTS(节省存储)。
3.2 摄像头监控方案
图像传输优化
原项目直接传输原始图片,我在app.py中增加了压缩逻辑:
from io import BytesIO from PIL import Image def compress_image(img_path): with Image.open(img_path) as img: img = img.resize((800, 600)) buffer = BytesIO() img.save(buffer, format='JPEG', quality=60) return buffer.getvalue()这样网页加载速度从3s降到0.5s,特别适合移动网络查看。
定时抓拍实现
在assistant.py中添加:
import schedule def job(): filename = f"/sdcard/DCIM/snapshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg" subprocess.run(f"termux-camera-photo -c 1 {filename}", shell=True) schedule.every(30).minutes.do(job) while True: schedule.run_pending() time.sleep(1)4. 音乐播放器深度改造
4.1 播放列表管理
原始版本只能随机播放,我扩展了这些功能:
- 按文件夹分类
music_library = { "轻音乐": "/sdcard/Music/Relaxing", "摇滚": "/sdcard/Music/Rock" }- 记忆播放位置
with open('/data/data/com.termux/files/home/.playback_state', 'w') as f: f.write(f"{current_track}|{current_position}")4.2 音频处理技巧
使用sox提升播放质量:
# 在播放前实时处理 play "input.mp3" rate -L 48k gain -n -3 bass +5参数说明:
- rate:统一采样率
- gain:标准化音量
- bass:增强低频
5. 系统优化与稳定性
5.1 后台保活方案
Android系统会严格限制后台进程,这些设置缺一不可:
- 在Termux中执行:
termux-wake-lock termux-notification --id keepalive --content "服务运行中"- 手机设置中:
- 电池优化 → Termux → 不优化
- 自启动管理 → 允许Termux自启
5.2 资源监控脚本
创建monitor.sh:
#!/bin/bash while true; do MEM=$(free -m | awk '/Mem:/ {print $3}') [ $MEM -gt 1500 ] && pkill -f "python assistant.py" && sleep 30 sleep 60 done当内存超过1.5GB时自动重启语音模块。
6. 安全加固措施
6.1 Web接口防护
修改app.py增加基础认证:
from flask_httpauth import HTTPBasicAuth auth = HTTPBasicAuth() @auth.verify_password def verify_password(username, password): return username == 'admin' and password == '你设置的强密码' @app.route('/admin') @auth.login_required def admin(): return render_template('admin.html')6.2 摄像头隐私保护
在config.json中增加:
"camera": { "enable": true, "auth_required": true, "schedule": { "disable": ["22:00-06:00"] } }7. 扩展功能实践
7.1 智能家居控制
通过HTTP请求控制米家设备(需安装miio):
import miio plug = miio.Device("192.168.1.100", "your_token") plug.on() # 打开插座7.2 语音备忘录功能
新增voice_note.py:
def save_note(text): filename = f"/sdcard/VoiceNotes/{datetime.now().strftime('%Y%m%d_%H%M')}.txt" with open(filename, 'w') as f: f.write(text) return f"已保存备忘:{text}"8. 故障排查手册
8.1 音频问题速查
| 现象 | 排查步骤 | 解决方案 |
|---|---|---|
| 无唤醒反应 | 1. 执行termux-microphone-record -l2. 检查pulseaudio服务状态 | pulseaudio --start重装termux-api |
| 播放卡顿 | 1. 查看CPU使用率 2. 检查音频文件格式 | 转码为MP3 128kbps 关闭其他进程 |
8.2 摄像头异常处理
遇到CAMERA_ERROR时:
- 重启termux-api服务
pkill termux-api termux-api &- 检查相机ID是否正确
termux-camera-info # 通常后置是1,前置是09. 性能调优记录
9.1 内存优化方案
在低配设备上(2GB内存):
- 修改Python垃圾回收阈值
import gc gc.set_threshold(700, 10, 5) # 提高回收频率- 使用轻量级WSGI服务器
pip install bjoern python -m bjoern app:app -b 127.0.0.1:50009.2 唤醒响应加速
通过预加载模型提升20%响应速度:
# 在assistant.py开头加载 from vosk import Model model = Model(lang="zh-cn")10. 实际使用体验
经过三个月的持续改进,我的旧手机现在可以:
- 早上7点自动播放新闻简报(通过RSS订阅)
- 宠物靠近摄像头时自动拍照并推送到Telegram
- 语音控制客厅的智能灯具
- 作为临时监控看护老人房间
最惊喜的是耗电量——持续运行24小时仅耗电15%(飞行模式+WiFi连接)。建议把手机固定在充电座上,放在客厅中央位置,麦克风和摄像头都能获得最佳覆盖范围。