Skip to content
  • 使用Face Recognition进行人脸识别

    替换apt和pip3镜像源(可选)

    在开始安装各种依赖库之前,最好先更换镜像源,执行如下命令:

    bash
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo vi /etc/apt/sources.list
    # 替换sources.list文件内容
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo vi /etc/apt/sources.list
    # 替换sources.list文件内容
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non
  • 安装Google拼音中文输入法

    想要输入中文,需要自己安装输入法,运行如下命令:

    bash
    sudo apt-get update
    sudo apt-get install -y fcitx fcitx-googlepinyin
    sudo reboot
    sudo apt-get update
    sudo apt-get install -y fcitx fcitx-googlepinyin
    sudo reboot

    之后点击Preferences–>Fcitx Configuration Fcitx-Configuration 点击加号,输入google,点击ok后就可以使用了。

  • 使用Picamera2和opencv进行人脸检测

    在前面我已经通过picamera2库调用了树莓派的摄像头,现在要实现一下人脸检测的功能,需要安装opencvopencv data:

    bash
    sudo apt install -y python3-opencv
    sudo apt install -y opencv-data
    sudo apt install -y python3-opencv
    sudo apt install -y opencv-data

    之后拷贝如下代码并运行:

    python
    #!/usr/bin/python3
    
    import cv2
    
    from picamera2 import Picamera2
    
    # Grab images as numpy arrays and lea
    #!/usr/bin/python3
    
    import cv2
    
    from picamera2 import Picamera2
    
    # Grab images as numpy arrays and lea
  • 使用Picamera2库调用摄像头

    之前已经通过命令行的模式调用了摄像头的预览,下面我们使用python的Picamera2库作一个简单的摄像头预览程序,新版本的Bookworm系统已经默认安装Picamera2了,不需要手动安装,如果没有安装的运行下面的命令:

    bash
    sudo apt update
    sudo apt install -y python3-picamera2
    sudo apt update
    sudo apt install -y python3-picamera2

    之后创建一个python文件,拷入下面代码:

    python
    from picamera2 import Picamera2, Preview
    import time
    
    # 创建 Picamera
    from picamera2 import Picamera2, Preview
    import time
    
    # 创建 Picamera
  • 通过VNC连接使用摄像头

    我现在安装的是Bookworm的新版本操作系统,默认是开启摄像头的,不需要像老版本在Raspberry Pi Configuration中再去开启。 关闭电源后接上摄像头,注意接线正反面,别接错了,之后运行:

    bash
    rpicam-hello -t 0
    rpicam-hello -t 0

    就可以在VNC中看到摄像头预览了 rpicam-hello-preview

    TIP

    可能需要网线来连接树莓派,用wifi卡的很,也有可能是我这个树莓派是很久之前的3B,可能有点问题,经常要开关电源好几次才能开

  • NestJS模块中providers,imports,exports的简单使用

    NestJS模块中有三个参数,分别是providers,imports和exports,很多时候经常会搞不清楚他们的具体用途,下面作个简单介绍。

    Providers(提供者)

    在 NestJS 中,providers 是一种处理业务逻辑的特殊类。它们是模块中的主要组件,用于处理数据存储、服务调用和其他与业务逻辑相关的任务。

    typescript
    // cat.service.ts
    
    import { Injectable } from '@nestjs/common';
    
    @Injectable()
    export class CatService {
      private cats = ['喵喵', '小胡子', '毛茸茸'];
    
      findAll(): string[] {
        return this.cats;
      }
    }
    // cat.service.ts
    
    import { Injectable } from '@nestjs/common';
    
    @Injectable()
    export class CatService {
      private cats = ['喵喵', '小胡子', '毛茸茸'];
    
      findAll(): string[] {
        return this.cats;
      }
    }

    在上面的代码中,CatService 被标记为 @Injectable(),表示它是一个提供者。这个服务简单地返回一个包含一些猫名字的数组。

  • Android开发常见问题:Android Studio gradle timeout 解决方法

    因为在多平台开发,经常会重新拉取代码,或者更新依赖,在gradle构建的时候,会出现read time out的报错,在中国区有时候挂 VPN 也不好使,这时候可以试试设置阿里云代理,如下:

    kotlin
    pluginManagement {
        repositories {
            maven("https://maven.aliyun.com/repository/google")
            maven("https://maven.aliyun.com/repository/public")
            maven("https://maven.aliyun.com/repository/jcenter")
            google()
            mavenCentral()
            gradlePluginPortal()
            maven("https://www.jitpack.io")
    
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            maven("https://maven.aliyun.com/repository/google")
            maven("https://maven.aliyun.com/repository/public")
            maven("https://maven.aliyun.com/repository/jcenter")
            google()
            mavenCentral()
            maven("https://www.jitpack.io")
    
        }
    }
    pluginManagement {
        repositories {
            maven("https://maven.aliyun.com/repository/google")
            maven("https://maven.aliyun.com/repository/public")
            maven("https://maven.aliyun.com/repository/jcenter")
            google()
            mavenCentral()
            gradlePluginPortal()
            maven("https://www.jitpack.io")
    
        }
    }
    dependencyResolutionManagement {
        repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            maven("https://maven.aliyun.com/repository/google")
            maven("https://maven.aliyun.com/repository/public")
            maven("https://maven.aliyun.com/repository/jcenter")
            google()
            mavenCentral()
            maven("https://www.jitpack.io")
    
        }
    }
    groovy
    buildscript {
        repositories {
            maven {
                url "https://maven.aliyun.com/repository/google"
            }
            maven {
                url "https://maven.aliyun.com/repository/public"
            }
            maven {
                url "https://maven.aliyun.com/repository/jcenter"
            }
            google()
            mavenCentral()
            gradlePluginPortal()
            maven {
                url "https://www.jitpack.io"
            }
        }
    }
    
    allprojects {
        repositories {
            maven {
                url "https://maven.aliyun.com/repository/google"
            }
            maven {
                url "https://maven.aliyun.com/repository/public"
            }
            maven {
                url "https://maven.aliyun.com/repository/jcenter"
            }
            google()
            mavenCentral()
            maven {
                url "https://www.jitpack.io"
            }
        }
    }
    buildscript {
        repositories {
            maven {
                url "https://maven.aliyun.com/repository/google"
            }
            maven {
                url "https://maven.aliyun.com/repository/public"
            }
            maven {
                url "https://maven.aliyun.com/repository/jcenter"
            }
            google()
            mavenCentral()
            gradlePluginPortal()
            maven {
                url "https://www.jitpack.io"
            }
        }
    }
    
    allprojects {
        repositories {
            maven {
                url "https://maven.aliyun.com/repository/google"
            }
            maven {
                url "https://maven.aliyun.com/repository/public"
            }
            maven {
                url "https://maven.aliyun.com/repository/jcenter"
            }
            google()
            mavenCentral()
            maven {
                url "https://www.jitpack.io"
            }
        }
    }

    配置 Proxy 代理

    如果更改了库源还是不行,可以试试配置 Android Studio 的代理设置,打开设置选项,搜索proxy,设置如下图: android-gradle-timeout-proxy-setting 具体设置的host需要根据每个人的 VPN 配置,比如在 MacOS 上,如果是Clash,可以点击Copy shell command,复制指令到终端查看 IP 端口信息内容: android-gradle-timeout-vpn

  • Jetpack Compose介绍

    Jetpack Compose 是 Android 官方推出的现代化 UI 工具包,它允许你使用 Kotlin 构建声明式的用户界面。本文将为你提供 Jetpack Compose 的快速入门指南,让你了解如何创建简单的 Composable 函数、构建用户界面以及处理用户交互。

    步骤 1:设置项目

    首先,确保你的 Android 项目已配置为使用 Jetpack Compose。你需要在项目的 build.gradle 文件中添加 Compose 相关依赖:

    android {
        ...
        buildFeatures {
            compose true
        }
    
        composeOptions {
            kotlinCompilerExtensionVersion '1.0.0-rc1'
        }
    }
    
    dependencies {
        ...
        implementation "androidx.compose.ui:ui:1.0.0-rc1"
        implementation "androidx.compose.material:material:1.0.0-rc1"
        implementation "androidx.activity:activity-compose:1.3.0-rc01"
    }
    android {
        ...
        buildFeatures {
            compose true
        }
    
        composeOptions {
            kotlinCompilerExtensionVersion '1.0.0-rc1'
        }
    }
    
    dependencies {
        ...
        implementation "androidx.compose.ui:ui:1.0.0-rc1"
        implementation "androidx.compose.material:material:1.0.0-rc1"
        implementation "androidx.activity:activity-compose:1.3.0-rc01"
    }

    TIP

    因为Compose还在不断地开发演进,所以版本众多,最近Google出了一个BOM的方式批量的方式去决定依赖版本,可以参考使用Using the Bill of Materials

  • Android Compose开发:使用Paging3进行分页加载

    Paging3 介绍

    Paging 3 是 Android 架构组件的一部分,旨在帮助 Android 应用程序有效地管理和显示大量数据。它专门用于处理分页加载,可以轻松地从网络或本地数据库加载数据,并以分页的方式显示在用户界面上。以下是 Paging 3 的简单介绍:

    1. 什么是 Paging 3?

    Paging 3 是一种用于处理分页加载数据的库,旨在简化 Android 应用程序中数据的管理和显示。它是 Android 架构组件的一部分,旨在解决应用程序中大量数据的常见问题。

    2. 核心概念

    Paging 3 基于