<span class="vcard">sts</span>
sts

使用ollama软件实现本地gpt使用

  • 官网下载ollama软件并安装
  • 根据需要设置环境变量,尤其是代理,不然网速非常慢
环境变量

OLLAMA_MODELS F:\xxx 
存放模型目录,如果没有指定,就会默认放C盘,C盘空间大那就随意

OLLAMA_ORIGINS *
来源限制,设置为*表示可以任意源访问,没限制

OLLAMA_HOST 0.0.0.0
访问主机限制,如果想要网络上任意主机访问的话,就设置0.0.0.0

set HTTP_PROXY=http://127.0.0.1:xxxx

  • 运行 ollama run llama2:2b,首次将自动下载模型
  • 下载安装chatbox并添加ollama服务地址 127.0.0.1:11434

大工告成!体验GPT吧!

nginx添加网站密码访问

放在互联网上的应用没法避免的有乱七八糟的病毒或者恶意用户来攻击,每天每时每刻都有,为了减少不必要的骚扰,可以对代理网站做一个密码防护,主要是一些测试页面和一些不对外公开的应用,在宝塔应用中其实就包含密码访问的功能,但是有缺陷,经过反复测试,还是没法对代理网站做密码防护,即便是路径确定为/也不行。

后面尝试使用nginx的密码认证模块,发现很好用,使用也比较简单,作一记录,方便以后查阅。

  1. apt install apache2-utils
  2. htpassed -c /www/server/nginx/.htpasswd username 此处username为你自定义的用户名
  3. 连续两次输入密码后,会生成.htpasswd文件
  4. 在nginx配置文件中添加以下代码:
    location ^~ / {
      auth_basic "Restricted Content";
      auth_basic_user_file /www/server/nginx/.htpasswd;
      proxy_pass http://localhost:8080;#替换你要代理的地址
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  • 如果需要ws连接的代理网站,还需要添加如下字段:
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_cache_bypass $http_upgrade;

这样就大工告成了!打开网站后显示如下:

esp32作为下位机,接受串口消息,进而控制两路电机

智能车控制系统可以通过以下步骤来设计:

  1. 硬件准备:
    • ESP32开发板
    • 两路电机驱动模块
    • 电机组件:直流电机、轮子等
    • 连接线和电源适配器等
  2. 连接硬件:
    • 将ESP32开发板连接到电脑,并设置开发环境。
    • 将两路电机驱动模块与ESP32上的串口进行连接。
    • 将电机与电机驱动模块进行连接。
  3. 编程:
    • 在ESP32开发板上编写程序来接收串口消息。
    • 使用串口通信库例如SerialSerialWire库来接收消息。
    • 解析接收到的消息,识别指令并执行相应操作。

以下是一个简单的示例代码来解析串口消息并控制电机:

#include <Serial.h>

// 定义电机引脚
const int motorPin1 = 1;
const int motorPin2 = 2;

void setup() {
  // 初始化串口
  Serial.begin(9600);

  // 设置电机引脚为输出
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
}

void loop() {
  // 检查是否有可用的串口数据
  if (Serial.available() > 0) {
    // 读取串口数据
    char command = Serial.read();

    // 根据收到的指令执行相应操作
    if (command == 'F') {
      // 向前运动,将电机1设为正转,电机2设为反转
      digitalWrite(motorPin1, HIGH);
      digitalWrite(motorPin2, LOW);
    }
    else if (command == 'B') {
      // 向后运动,将电机1设为反转,电机2设为正转
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
    }
    else if (command == 'S') {
      // 停止运动,将电机1和电机2都设为停止(不转动)
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
    }
  }
}

在这个简单的示例中,我们通过串口通信接收指令,并根据指令来控制电机的正反转。接收到指令后,我们使用digitalWrite函数来设置相应的引脚状态,控制电机的运行。

请根据实际硬件和需求进行适当的调整和扩展。

flutter使用usb转串口工具与esp32进行通信

以下是一个简单的Flutter示例程序,用于连接USB串口设备与ESP32进行通信。程序使用usb_serial库来连接USB串口设备并使用串口通信。

import 'package:flutter/material.dart';
import 'package:usb_serial/usb_serial.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  UsbSerialPort? _port;
  String _data = '';

  @override
  void initState() {
    super.initState();
    _initUsb();
  }

  void _initUsb() async {
    List<UsbDevice> devices = await UsbSerial.listDevices();
    if (devices.isNotEmpty) {
      UsbDevice device = devices[0];
      List<UsbSerialPort> ports = await UsbSerial.open(device);
      if (ports.isNotEmpty) {
        _port = ports[0];
        _port!.inputStream.listen((Uint8List data) {
          setState(() {
            _data = String.fromCharCodes(data);
          });
        });
      }
    }
  }

  void _sendData(String data) {
    if (_port != null) {
      _port!.write(Uint8List.fromList(data.codeUnits));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('USB串口通信示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '接收到的数据: $_data',
            ),
            ElevatedButton(
              onPressed: () {
                _sendData('Hello from Flutter');
              },
              child: Text('发送数据给ESP32'),
            ),
          ],
        ),
      ),
    );
  }
}

在该示例程序中,我们首先获取已连接的USB设备列表,然后打开第一个设备并获取串口通信端口。接着,我们监听串口的输入流,并在接收到数据时更新界面显示。最后,我们提供一个按钮来向ESP32发送数据。

要运行此示例程序,请确保已在pubspec.yaml文件中添加了usb_serial库的依赖,并在项目中配置了USB设备权限。

jetson orin 上安装pytorch避坑

第一个坑

安装官网教程直接安装 pip3 install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118

不管什么版本,都用不了cuda

找到nvidia官网论坛上有专门的介绍jetson板子的驱动:PyTorch for Jetson – Jetson & Embedded Systems / Jetson Nano – NVIDIA Developer Forums

然后下载whl后直接安装,下载文件名比较长

第二个坑 文件名不能修改

修改之后安装的时候会报错,报的就是文件名不对,也不知道这个设计思路到底是为啥

安装完torch之后,可以看到这个版本比较特殊,好歹cuda可以用了

使用yolo的时候下一个坑出现了,ultralytics 需要torchvision模块,想当然的就 pip install torchvision,结果把刚安装的torch给卸载了,重新装上了torch 2.1.0版本,一夜回到解放前

只能找jetson板子对应的torch vision模块,找了半天,竟然在刚才下载torch的页面上,而且还贴心的给出了torch和torchvision版本对应关系和安装方法,真的感动死

ubuntu安装xrdp时遇到的问题记录

手上有一台jstson orin的机器,装了ubuntu系统,因为之前别的机器上装过,没有遇到什么问题,没想到还是出了问题,特此记录!

安装:sudo apt-get install xrdp

在windows 上打开远程连接工具,发现连接不上,一点登陆就闪退,于是找问题

先是服务器上在设置里面打开屏幕共享和远程控制功能,然后还是不行,切换到home目录,有一个隐藏文件,.xsession-errors ,cat 命令打开,发现有错误,如下

网上一搜,说是sh命令在ubuntu上面默认是dash而不是bash,所以无法不兼容,卧槽塔猴,之前为啥没问题!

解决办法,要么就是修改脚本,但是这里没法改,只能将dash改为bash

方法: sudo dpkg -reconfigure dash

选择no即可

然后重启xrdp服务。systemctl restart xrdp

这下终于可以连上了,但是屏幕除了背景,啥也没有

这又是啥问题!

一搜原来是ubuntu 开启了3d桌面

这其实也没用,因为图中的帖子是2012年针对老版本的,新版本不适用,又找到一篇帖子,

这一次竟然解决了

成功出现了画面

特此记录

特色

python对视频或图片使用图片蒙版的小技巧

1.使用cv2将png图片作为蒙版进行应用,特别优雅的进行修改img[imgMask==255] = [128, 128, 128]

import cv2
img = cv2.imread('ori.png',cv2.IMREAD_COLOR)
imgMask = cv2.imread('1.png',cv2.IMREAD_GRAYSCALE)
img[imgMask==255] = [128, 128, 128] 
res = img
cv2.imshow('maskimg',res)
cv2.waitKey(0)

2.对于视频来说,也是类似操作

import cv2
cap = cv2.VideoCapture('../videos/1.mp4')
imgMask = cv2.imread('1.png',cv2.IMREAD_GRAYSCALE)
# 检查视频是否成功打开
if not cap.isOpened():
    print("无法打开视频文件")
    exit()
while cap.isOpened():
    ret,img = cap.read()
    img[imgMask==255] = [128, 128, 128] 
    cv2.imshow('maskimg',img)
    cv2.waitKey(1)
cap.release()

raid1阵列的信息查询和故障修复

在centos系统下,先试用命令cat /proc/mdstat查看,

cat /proc/scsi/scsi查看:

ls /dev可查看所有的设备:

最后可以试用mdadm命令查看相应的磁盘信息:

可以看到有一块磁盘降级且被移除了,有可能是断电导致,也有可能是磁盘有损伤导致,由于此盘是在x79主板上硬raid组成,所以需要在服务器端操作,大致的步骤就是把坏盘取下,然后检查磁盘状况,没有问题的话,就格式化一下再装回去,有问题的话就要换一块新的。装上之后执行重建即可。

参考删除阵列磁盘的帖子:https://www.itshiye.com/18/33768.html

pip源的修改和使用-备忘

pip修改默认镜像源_pip恢复默认源_H.S.T不想卷的博客-CSDN博客

国内的几个源:

地址归属
http://mirrors.aliyun.com/pypi/simple/阿里云
http://pypi.douban.com/simple/豆瓣
http://pypi.mirrors.ustc.edu.cn/simple/中国科学技术大学
https://pypi.mirrors.ustc.edu.cn/simple/中国科技大学
https://pypi.tuna.tsinghua.edu.cn/simple/清华大学

永久修改

一种方案是修改配置文件,可以找到配置文件修改,也可以使用命令修改,配置文件windows系统在\User{本机用户名称}\AppData\Roaming\pip\pip.ini,修改命令参考:

pip config setglobal.index-url https://pypi.tuna.tsinghua.edu.cn/simple

临时使用:

pip install [模块] -i http://mirrors.aliyun.com/pypi/simple/

诺提示http连接不安全,还要加上一个参数

pip install [模块] -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

特色

记录一次paddleSeg的使用过程

根据官方的描述,PaddleSeg/README_CN.md at release/2.2 · PaddlePaddle/PaddleSeg · GitHub,paddleSeg功能非常强大,不仅可以快速分割实例,还可以支持视频,从1帧智能扩散到其它全部。

下面说一下踩坑的过程。

介绍链接:PaddleSeg/EISeg at release/2.8 · PaddlePaddle/PaddleSeg · GitHub

首先,简单验证一下功能,直接下载了ElSeg的windows版本,已经打包好的,下载解压运行就行。下载地址不太好找,在这里:PaddleSeg/contrib/EISeg at release/2.2 · PaddlePaddle/PaddleSeg · GitHub

视频标注这里是没法下载的,PaddleSeg/EISeg/docs/video.md at release/2.8 · PaddlePaddle/PaddleSeg · GitHub,需要到develop分支下去下载,release下挂载的竟然是问卷星的链接,无语!

下载后倒是可以运行,标了一些图片之后,导入到paddleX进行训练,训练结束后导出模型到G:\paddlex-workspace\P0012-T0077_export_model\inference_model\inference_model,然后使用fastDeploy进行部署,最好是使用python,这样可以快速接入摄像头。

环境安装:FastDeploy/docs/cn/build_and_install/download_prebuilt_libraries.md at develop · PaddlePaddle/FastDeploy · GitHub

预编译库安装:FastDeploy/docs/cn/build_and_install/download_prebuilt_libraries.md at develop · PaddlePaddle/FastDeploy · GitHub

部署示例:FastDeploy/examples/vision/segmentation/paddleseg/matting/cpu-gpu/python at develop · PaddlePaddle/FastDeploy · GitHub

使用示例:FastDeploy/docs/cn/quick_start/models/python.md at develop · PaddlePaddle/FastDeploy · GitHub