当前位置: 首页 > news >正文

ArduinoTFTLCD应用

ArduinoTFTLCD应用

  • ArduinoTFTLCD应用
    • 硬件连接
    • 软件
      • 导入库
      • 显示数字、字符
      • 显示汉字
        • 方案1
        • 方案2
      • 显示图片
    • 总结

ArduinoTFTLCD应用

对于手工喜欢DIY的人来说,Arduino驱动的TFTLCD被很多人使用,此处就总结一下,使用的是VScodePlatformIO插件驱动的Arduino,芯片使用的是ESP32

硬件连接

这里采用的是10PIN的ST7789驱动的TFTLCD屏幕,是硬件SPI驱动的。

        TFTLCD硬件管脚
在这里插入图片描述
        ESP32硬件管脚
在这里插入图片描述
我们连接的是ESP32的HSPI引脚。

功能TFTLCD引脚ESP32引脚
数据输出MOSI13
时钟SCLK14
片选CS15
选择端口DC2
复位引脚RST4
背光正BL12
电源地GNDGND
背光负GNDGND
电压正VCCVCC

有些SPI是这样标注的,引脚都是一样的。

字符1字符2功能
CSCS片选,低电平使能
DCRS数据/命令选择端口,DC端口为低时,写入的是命令;为高时,写入的是数据
RSTRESET复位信号,低电平复位
MISOSDA从设备数据输出
MOSISDI主设备数据输出
SCLKSCL时钟,由主设备发出

按照如图所示进行硬件连接。

软件

        使用的是VScodePlatformIO插件驱动的Arduino,芯片使用的是ESP32

导入库

        安装TFT_eSPI:TFT_eSPI 是一个用于 ESP32 和 ESP8266 上的基于图形显示控制器的开源软件库。它提供了一种简单且高效的方式来与 TFT LCD 显示器进行交互并创建令人惊叹的图形界面。

在左侧文件目录中\.pio\libdeps\esp32dev\TFT_eSPI\User_Setup.h文件中。

驱动要选择

// Only define one driver, the other ones must be commented out
//#define ILI9341_DRIVER       // Generic driver for common displays
//#define ILI9341_2_DRIVER     // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172
//#define ST7735_DRIVER      // Define additional parameters below for this display
//#define ILI9163_DRIVER     // Define additional parameters below for this display
//#define S6D02A1_DRIVER
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
//#define HX8357D_DRIVER
//#define ILI9481_DRIVER
//#define ILI9486_DRIVER
//#define ILI9488_DRIVER     // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
#define ST7789_DRIVER      // Full configuration option, define additional parameters below for this display
//#define ST7789_2_DRIVER    // Minimal configuration option, define additional parameters below for this display
//#define R61581_DRIVER
//#define RM68140_DRIVER
//#define ST7796_DRIVER
//#define SSD1351_DRIVER
//#define SSD1963_480_DRIVER
//#define SSD1963_800_DRIVER
//#define SSD1963_800ALT_DRIVER
//#define ILI9225_DRIVER
//#define GC9A01_DRIVER

屏幕尺寸

// For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation
// #define TFT_WIDTH  80
// #define TFT_WIDTH  128
// #define TFT_WIDTH  172 // ST7789 172 x 320
// #define TFT_WIDTH  170 // ST7789 170 x 320
#define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320
// #define TFT_HEIGHT 160
// #define TFT_HEIGHT 128
// #define TFT_HEIGHT 240 // ST7789 240 x 240
#define TFT_HEIGHT 320 // ST7789 240 x 320
// #define TFT_HEIGHT 240 // GC9A01 240 x 240

IO口

// For ESP32 Dev board (only tested with GC9A01 display)
// The hardware SPI can be mapped to any pins
#define TFT_MOSI 13 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_SCLK 14
#define TFT_CS   15  // Chip select control pin
#define TFT_DC   2  // Data Command control pin
#define TFT_RST  4  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   12  // LED back-light

其他不做修改。

main.app文件中。导入头文件在这里插入代码片#include <TFT_eSPI.h>

#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象
void setup()
{Serial.begin(115200);tft.init();                // 初始化// tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色// analogWrite(BLK, 150);     // 调节屏幕亮度,0最亮,255最暗
}
void loop() {}

显示数字、字符

tft.setTextColor(TFT_WHITE, TFT_BLACK); // 参数1:字体颜色,参数2:背景色tft.setTextFont(2); // 字体大小16*16
tft.println("Hello,world");
tft.drawString("I want to eat something", 0, 50, 2);tft.setTextFont(4); // 字体大小26*26
tft.drawNumber(1234, 0, 70);
tft.drawFloat(3.14159, 5, 0, 90);

显示汉字

方案1

利用OLED显示汉字方法,去驱动TFTLCD显示汉字。利用PCtoLCD2002.exe进行取模,然后导入文件中,利用点阵进行显示。如图所示取模方式。
在这里插入图片描述

新建文件Chinese_32.h并导入数组。

/***************************16*16的点阵字体取模方式:共阴——列行式——逆向输出*********/
unsigned char character[] = "第二一三四五";
uint8_t F16x16[] ={0x08, 0x04, 0x93, 0x92, 0x96, 0x9A, 0x92, 0xFA, 0x94, 0x93, 0x92, 0x96, 0xFA, 0x02, 0x02, 0x00,0x40, 0x40, 0x47, 0x24, 0x24, 0x14, 0x0C, 0xFF, 0x04, 0x04, 0x24, 0x44, 0x24, 0x1C, 0x00, 0x00, // 第",0/* (16 X 16 , 宋体 )*/0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // 二",2/* (16 X 16 , 宋体 )*/0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 一",1/* (16 X 16 , 宋体 )*/0x00, 0x04, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x04, 0x00, 0x00,0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, // 三",3/* (16 X 16 , 宋体 )*/0x00, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0x00, 0x00,0x00, 0x7F, 0x28, 0x24, 0x23, 0x20, 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x22, 0x7F, 0x00, 0x00, // 四",4/* (16 X 16 , 宋体 )*/0x00, 0x02, 0x42, 0x42, 0x42, 0xC2, 0x7E, 0x42, 0x42, 0x42, 0x42, 0xC2, 0x02, 0x02, 0x00, 0x00,0x40, 0x40, 0x40, 0x40, 0x78, 0x47, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x40, 0x00, // 五",5/* (16 X 16 , 宋体 )*/
};

在main.app函数

#include <TFT_eSPI.h>
#include "Chinese_32.h"TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象
#include <TJpg_Decoder.h>#define BLK 5 // 亮度控制引脚//--------------------------------------------------------------
// Prototype      : void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
// Calls          :
// Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引
// Description    : 显示codetab.h中的汉字,16*16点阵
//--------------------------------------------------------------// 显示汉字
void OLED_ShowCN(uint8_t x, uint8_t y, uint8_t no)
{uint8_t t, j;uint16_t k;for (t = 0; t < 16; t++){k = F16x16[no * 32 + t];for (j = 0; j < 8; j++){if ((k >> j) & 0x01)tft.drawPixel(x + t, y + j, TFT_WHITE);}}for (t = 0; t < 16; t++){k = F16x16[no * 32 + 16 + t];for (j = 0; j < 8; j++){if ((k >> j) & 0x01)tft.drawPixel(x + t, y + j + 8, TFT_WHITE);}}
}uint8_t OLED_findoneCN(uint8_t ch1, uint8_t ch2, uint8_t ch3)
{uint8_t j = 0;while (character[j] != '\0'){if (ch1 == character[j] && ch2 == character[j + 1] && ch3 == character[j + 2])return j / 3 + 1;j += 3;}return 0;
}void OLED_Show(unsigned char x, unsigned char y, char ch[])
{int j = 0, k;while (ch[j] != '\0'){Serial.println(ch[j]);if (ch[j] > 0x80) // 汉字{k = OLED_findoneCN(ch[j], ch[j + 1], ch[j + 2]);if (k != 0)OLED_ShowCN((j / 3 * 2) * 8 + x, y, k - 1);j += 3;}else // ASCLL{tft.drawString((String)ch[j], (j / 3 * 2) * 8 + x, y, 2);j++;}}
}void TFT_Init()
{tft.init();                // 初始化// tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色// analogWrite(BLK, 150);     // 调节屏幕亮度,0最亮,255最暗
}void TFT_Display()
{tft.setTextColor(TFT_WHITE, TFT_BLACK); // 参数1:字体颜色,参数2:背景色tft.setTextFont(2); // 字体大小16*16tft.println("Hello,world");tft.drawString("I want to eat something", 0, 50, 2);tft.setTextFont(4); // 字体大小26*26tft.drawNumber(1234, 0, 70);tft.drawFloat(3.14159, 5, 0, 90);tft.setTextColor(TFT_WHITE, TFT_BLACK); // 参数1:字体颜色,参数2:背景色OLED_Show(0, 120, (char*)"第二一三四五");
}void setup()
{Serial.begin(115200);TFT_Init();TFT_Display();
}void loop() {}

如图所示结果。
在这里插入图片描述

方案2

        导入字库。

  1. 目录\.pio\libdeps\esp32dev\TFT_eSPI\Tools\Create_Smooth_Font文件下有三个文件。
    其中Create_font.pde:代码,通过该代码来制作字库文件。
    FontFiles : 存放我们制作出来的字库文件,制作出来后是vlw结尾的。
    data : 存放我们的字体文件,用ttf结尾的。
  2. 去https://processing.org/ 下载processing软件(资料中都放有)。
  3. 去自己的电脑中C:\Windows\Font文件中找到你想要的字体,放到data文件夹下。
  4. 在https://www.osgeo.cn/app/sa906网站中,将需要转化的汉字转成unicode编码,然后将\u转化成0x
  5. 使用processing打开Create_font.pde文件。
  6. 修改以下内容:将需要转化的的汉字的unicode编码放到specificUnicodes 数组中。
    String fontName = "simkai";  // 你的字库的文件名字。 在130行
    String fontType = ".ttf";
    //String fontType = ".otf";// Define the font size in points for the TFT_eSPI font file
    int  fontSize = 20;
    // Font size to use in the Processing sketch display window that pops up (can be different to above)
    int displayFontSize = 20;
    static final int[] unicodeBlocks = {//0x0030, 0x0039, //Example custom range (numbers 0-9)//0x0041, 0x005A, //Example custom range (Upper case A-Z)//0x0061, 0x007A, //Example custom range (Lower case a-z)
    };
    static final int[] specificUnicodes = {
    0x56e0,0x6709,0x7740,0x4f60,0x8ddf,0x5728,0x4e00,0x8d77,0x6211,0x7231,0x683e,0x8c46,0x5f20,0x5b66,0x806a
    };
    
  7. 点击运行,正确的话会弹出一个对话框,然后会在FontFiles 文件夹中生成一个.h的字库。
  8. 将生成的字库文件放入src文件夹中。
  9. 然后在主函数中:
    #include "KT_20_A.h"		//导入字库。
    tft.loadFont(KT_20_A); 		//指定tft屏幕对象载入font_12字库,KT_20_A为生成字库的数组名字。
    tft.drawString("武汉",0,0) 	//在坐标0,0位置处写武汉2个字,就可以在tft显示出来了。
    tft.unloadFont(); 			//释放字库文件,节省资源。
    

显示图片

  1. Image2Lcd打开一张BMP或者JPG格式的图片。
  2. 设置成如图所示,点击保存,注意输出图像位置的数字(238,320)
    在这里插入图片描述
  3. 程序中加入:
    #include <TFT_eSPI.h>
    #include "Chinese_32.h"
    #include "BMP1.h"TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象
    #include <TJpg_Decoder.h>void TFT_Display()
    {tft.pushImage(0, 0, 238, 320, (uint16_t*)gImage_demo_image1);
    }void setup()
    {tft.init();                // 初始化// tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色// analogWrite(BLK, 150);     // 调节屏幕亮度,0最亮,255最暗tft.fillScreen(TFT_BLACK);TFT_Display();
    }
    void loop() {}
    
  4. 如图所示的效果。
    在这里插入图片描述

总结

        以上所有资料和应用我都放在文件中了。


资料地址:https://download.csdn.net/download/weixin_42320020/88901719

禁止转载!

相关文章:

ArduinoTFTLCD应用

ArduinoTFTLCD应用 ArduinoTFTLCD应用硬件连接软件导入库显示数字、字符显示汉字方案1方案2 显示图片 总结 ArduinoTFTLCD应用 对于手工喜欢DIY的人来说&#xff0c;Arduino驱动的TFTLCD被很多人使用&#xff0c;此处就总结一下&#xff0c;使用的是VScode的PlatformIO插件驱动…...

《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!

在IP产业风起云涌的今天&#xff0c;如何以创意和匠心为传统文化注入新的活力&#xff0c;成为了摆在每一位文化工作者面前的重要课题。近日&#xff0c;《秦时明月》作为一部深受观众喜爱的国产动画IP&#xff0c;在迎来其十七周年之际&#xff0c;联手陕西历史博物馆&#xf…...

2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除

一、事件机制 1、事件源.事件类型(事件处理程序) $(this)中的this不能加引号 $(#box).click(function () {$(this).css(background-color,blue)//点击颜色变为蓝色 })2、事件源.on/bind(事件类型&#xff0c;事件处理程序) $("#box").on(dbclick,function () {$(…...

YOLOv6-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…...

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制&#xff0c;采用人工登记的方式保存相关数…...

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接…...

AJAX 学习笔记(Day1)

「写在前面」 本文为黑马程序员 AJAX 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 AJAX 入门 1.1 AJAX 概念和 axios 使用 1.2 认识 URL 1.3 URL 查询参数 1.4 常用请求方法和数据提交 1.5 HT…...

leetcode 740.删除并活得点数

这道题和打家劫舍得思路很像。 思路&#xff1a;首先我们看到题目的意思&#xff0c;就是说我们如果选择了一个数&#xff0c;那么它相邻的数就会不得选入&#xff0c;也就是删除。这就是上一个题那个相邻的家不能偷的问题呗&#xff01; 我们从那个地方转换一下&#xff0c;…...

寻找峰值[中等]

优质博文IT-BLOG-CN 一、题目 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] nums[n] -∞。 你…...

【ESP32 IDF】key按键与EXTI中断

文章目录 前言一、按键的使用1.1 按键的简介1.2 读取按键的高低电平1.3 读取按键具体代码 二、中断二、EXIT外部中断2.1 EXIT外部中断简介2.2 外部中断基础知识2.3 设置外部中断注册外部中断服务函数设置触发方式添加中断函数 2.4 示例代码 总结 前言 在嵌入式系统开发中&…...

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…...

零拷贝技术深入分析

一、零拷贝 在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析&#xff0c;但没有举例子&#xff0c;也没有深入进行展开分析。本文将结合实际的例程对零拷贝进行更深入的分析和说明。 在传统的IO操作中&#xff0c;以文件通过网络传输为例 &#xff0c;一般会经历以…...

Android 基础入门 基础简介

1. 观察App运行日志 2.Android 开发设计的编程语言 koltin Java c c 3.工程目录结构 4.Gradle 5.build.gradle 文件解析 plugins {id("com.android.application")//用了哪些插件 主配置文件版本控制 所以这里不用写版本 }android {namespace "com.tiger.myap…...

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示&#xff0c;用户网络 1 通过 LSW1 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连&#xff0c; Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数&#xff0c;对 VLAN2 进…...

编程笔记 Golang基础 042 文件处理

编程笔记 Golang基础 042 文件处理 一、文件处理二、Go语言文件处理创建文件和写入内容打开文件并按模式读写读取文件内容更高级的文件和IO操作改变文件权限目录操作 小结 一、文件处理 文件处理是指在计算机科学中&#xff0c;对存储在磁盘或其他持久性存储介质上的文件进行的…...

linuxlsof详解

lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息&#xff0c;我们都知道&#xff0c;在Linux中&#xff0c;一切皆文件&#xff0c;lsof命令可以查看所有已经打开了的文件&#xff0c;比如: 普通文件&#xff0c;目录&#xff0c;特殊的块文件&#xff0c;…...

学习JAVA的第十二天(基础)

目录 算法 查找算法 基本查找&#xff08;顺序查找&#xff09; 二分查找&#xff08;折半查找&#xff09; 分块查找 排序算法 冒泡排序 选择排序 插入排序 快速排序 递归算法 算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff…...

Vector集合源码分析

Vector集合源码分析 文章目录 Vector集合源码分析一、字段分析二、方法分析三、总结 内容如有错误或者其他需要注意的知识点&#xff0c;欢迎指正或者探讨补充&#xff0c;共同进步。 一、字段分析 //用于存储该集合中的所有数据对象&#xff0c;所以是基于数组实现的 protec…...

Unity引擎中光源都有哪几种,都有什么作用

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity 引擎为了实现游戏场景的明暗和光影效果&#xff0c;提供了四种类型的光源&#xff0c;分别是方向光&#xff08;Directional Lights&#xff09;、点光源&#xff08;Point Lights&#xff09;、聚光灯…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...