音視頻開發4-補充 FFmpeg 開發環境搭建 -- 在windows 上重新build ffmpeg

本節的目的是在windows 上 編譯 ffmpeg 源碼,這樣做的目的是:在工作中可以根據工作的實際內容裁剪 ffmpeg,或者改動 ffmpeg 的源碼。

第一步 :下載, 安裝,配置 ,運行 msys64

下載?

下載地址: https://www.msys2.org/
MSYS2 (Minimal SYStem 2)是?個MSYS的獨?改寫版本,主要?于 shell 命令?開發環境。同時它也 是?個在Cygwin(POSIX 兼容性層) 和 MinGW-w64(從"MinGW-?成")基礎上產?的,追求更好的互操 作性的 Windows 軟件。
MSYS2 是MSYS的?個升級版,準確的說是集成了panman和Mingw-64的Cygwin升級版, 提供了bash shell等linux環境、版本控制軟件(git/hg)和MinGW-w64 ?具鏈。與MSYS最?的區別是移植了Arch linux的軟件包管理系統Pacman(其實是與Cygwin的區別)。

安裝 配置

1. 下載安裝MSYS2(按照官?安裝到??指定的?錄下,本?安裝于C:/msys64new)
2. 安裝完成之后,先把安裝?錄下的msys2_shell.cmd中注釋掉的
rem set MSYS2_PATH_TYPE=inherit 改成 set MSYS2_PATH_TYPE=inherit ,這是為了將vs的環境繼 承給MSYS2。
本節測試中安裝在?C:\msys64new

MSYS2可以選擇msys或者MinGW-w64環境來編譯,不過在msys下使?gcc編譯出來的exe和dll依賴 msys-2.0.dll,?MinGW-w64下編譯出來的?件不需要依賴這個dll,從程序的運?效率來看,不依賴這 個dll的程序的效率應該更?。所以選擇MinGW-w64來編譯更佳。

配置-修改pacman的源 - 在最新的msys64中已經不用改動,改動后反而有錯誤

pacman是?個軟件包管理器,?來在MSYS2中安裝軟件,但是默認的國外的源下載安裝包時?常緩慢, ?概只有????KB的速度,?且還容易下載中斷出錯,所以需要修改為國內源,國內源可以選擇中科? 的源。
按照MSYS2鏡像提示修改。具體如下:
編輯 /etc/pacman.d/mirrorlist.mingw32 ,在?件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

編輯 /etc/pacman.d/mirrorlist.mingw64 ,在?件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
編輯 /etc/pacman.d/mirrorlist.msys ,在?件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

運行?msys2_shell.cmd -mingw64

1. 啟動命令?窗?,在窗?中輸?:

在cmd模式下 進?msys2安裝?錄cd c:\msys64
#如果要打開msys2的mingw64窗?
msys2_shell.cmd -mingw64
#如果要打開msys2的msys窗?
#msys2_shell.cmd

2. 然后在msys2的shell中執?:

pacman -Sy
目的是 : 刷新軟件包數據。

二 安裝編譯環境

gcc編譯器、git等
msys2 遇到兩類開發環境:
1. MSYS2 ?帶的開發環境,安裝的包叫 msys2-devel
2. MinGW-w64 的安裝
17 這兩者有什么區別呢?
??以蔽之,前者編譯出來的可執??件,要依賴 MSYS2 提供的動態鏈接庫,?后者不需要。下?詳細
說明?下:
(1) MSYS2 下的 gcc 編譯環境,編譯的可執??件要依賴于 msys-2.0.dll,這個 DLL 提供了 Linux
下編程的提供的函數和接?,例如 fork 函數。
這個編譯環境對于編譯基于 Linux 下編寫的軟件,是?常適合的。例如編譯 GNU 提供的各種?具。例
如,你想編譯最新版本的 GNU grep ?具,MSYS2 下的這個環境是?常適合的。
(2)? MinGW64 的編譯環境, 不再依賴于 msys-2.0.dll,如果源代碼就是基于 windows 開發的,那
使? MinGW 的編譯環境?較好,編譯出來的可執??件,不?再依賴 MSYS 提供的動態鏈接庫。當然,
前提是代碼中不能使? Linux 的東?,即 POSIX 的那套東?。

1??編譯工具鏈

pacman -S mingw-w64-x86_64-toolchain

2? 編譯工具

pacman -S git
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl

pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S pkg-config
pacman -S mingw-w64-x86_64-SDL2


pacman -S mingw-w64-x86_64-yasm

編譯當前最新x264時需要?到nasm。

pacman -S nasm

查看結果 which cl link yasm cpp

看返回結果, 沒有no的結果?般就沒問題。

3? 編譯第三?庫

將下載下的放置于/home/用戶名/ffmpeg下,本次用戶名為Administrator,因此會放在?/home/Administrator/ffmpeg下,把第三?庫編譯的庫?件放在 /home/Administrator/ffmpeg/build。
查看當前路徑:
Administrator@DESKTOP-SU7G9P3 MINGW64 ~
# pwd
/home/Administrator

mkdir ffmpeg
cd ffmpeg

3.1 下載x264,生成動態庫文件,靜態庫文件

git clone http://git.videolan.org/git/x264.git

cd進入到 x264 目錄下
cd x264

./configure --prefix=/home/Administrator/ffmpeg/build/libx264 --host=x86_64-w64-mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.defmakemake install

?成libx264.lib
cp ./libx264.def /home/Administrator/ffmpeg/build/libx264/lib/

cd /home/Administrator/ffmpeg/build/libx264/lib

#若要生成64位lib文件則輸入如下命令:
lib?/machine:X64 /def:libx264.def
#若要生成32位lib文件則輸入如下命令:
lib?/machine:i386 /def:libx264.def
緣由:因為要借助mingw64來編譯一個第三方庫,需要編譯成Windows所需的lib文件,其中執行到一條命令:lib /machine:X64 /def:libx264.def結果出現錯誤:bash: lib command not found最開始以為是libtool出了問題,后來發現整個msys64目錄下沒有lib.exe,然后就想到了Visual Studio自帶的lib.exe。解決辦法:把Visual Studio自帶lib.exe的所在目錄添加到環境變量Path當中

請注意上面是64位的,請注意要根據實際路徑來添加。

添加完畢之后,記得要重啟mingw64

然后使用cmd 命令,進入到C:\msys64new\home\Administrator\ffmpeg\build\libx264\lib

執行? lib /machine:X64 /def:libx264.def

3.1.1?制作3rd庫

新建lib264文件夾,拷貝libx264-158.dll 到文件夾下,并命名為libx264.dll?新建include和lib目錄,分別將x264.h、x264_config.h拷貝到include目錄,libx264.lib拷貝到lib目錄下

libx264官?下載
https://www.videolan.org/developers/x264.html

3.2 下載和編譯fdk-aac

下載fdk-aac

cd /home/Administrator/ffmpeggit clone --depth 1 https://gitee.com/mirrors/fdk-aac.gitcd fdk-aac./autogen.sh./configure --prefix=/home/Administrator/ffmpeg/build/libfdk-aac --enable-static --enable-sharedmake -j4make install
libfdk_aac官?下載
https://sourceforge.net/projects/opencore-amr/files/fdk-aac/

3.3下載編譯mp3

cd /home/Administrator/ffmpeggit clone --depth 1 https://gitee.com/hqiu/lame.gitcd lame./configure --prefix=/home/Administrator/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make
make install

libmp3lame官?下載(選擇版本>= 3.98.3
https://sourceforge.net/projects/lame/files/lame/

3.4 下載編譯libvpx

cd /home/Administrator/ffmpeg
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix=/home/Administrator/ffmpeg/build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make -j4
make install

4.下載和編譯ffmpeg

下載 ffmpeg 源碼,可以直接從ffmpeg網站上直接下載,下載后解壓。
https://ffmpeg.org/releases/ffmpeg-7.0.tar.xz
cd /home/Administrator/ffmpeg
./configure \
--prefix=/home/Administrator/ffmpeg/build/ffmepg-7.0 \
--arch=x86_64 \
--enable-shared \
--enable-gpl \
--enable-libfdk-aac \
--enable-nonfree \
--enable-libvpx \
--enable-libx264 \
--enable-libmp3lame \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libfdk-aac/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libfdk-aac/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libvpx/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libvpx/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libx264/include" \
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libx264/lib" \
--extra-cflags="-I/home/Administrator/ffmpeg/build/libmp3lame/include"\
--extra-ldflags="-L/home/Administrator/ffmpeg/build/libmp3lame/lib"
make -j8
make install
如上在測試的時候,第一天下午到晚上,始終發生問題,提示 lame的版本要>=38.6,但是第二天就好了,原因未知,記錄在案。
這時候如果我們在windows上通過cmd命令形式調用ffmpeg,會提示各種dll 找不到。

此時bin目錄中的ffmpeg、ffprobe、ffplay還是沒法使用的,因為缺少相關的dll,需要從%MSYS2_HOME%/mingw64/bin中拷貝,或者將%MSYS2_HOME%/mingw64/bin配置到環境變量Path中。

需要拷貝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc++-6、libx265、libx264-159、libfdk-aac-2? ,? libva_win32.dll

從?C:\msys64new\mingw64\bin 中拷貝數據到?C:\msys64new\home\Administrator\ffmpeg\build\ffmepg-7.0\bin

---------------------------------------------------------

三,另一種安裝方案。

參考博客如下:

https://www.cnblogs.com/mjios?page=3

下載安裝MSYS2

進入MSYS2官網下載安裝包(我這邊下載的是:msys2-x86_64-20210228.exe),然后進行安裝。

安裝完畢后打開命令行工具mingw64.exe

安裝依賴

pacman(Package Manager)是一個包管理工具。

  • pacman -Sl:搜索有哪些包可以安裝
  • pacman -S:安裝
  • pacman -R:卸載
pacman -Sy
目的是 : 刷新軟件包數據

# 編譯工具鏈
pacman -S mingw-w64-x86_64-toolchain
?
pacman -S mingw-w64-x86_64-yasm
?
pacman -S mingw-w64-x86_64-SDL2
?
pacman -S mingw-w64-x86_64-fdk-aac
?
pacman -S mingw-w64-x86_64-x264
?
pacman -S mingw-w64-x86_64-x265? 這個不會有build error ,但是執行的時候,提示x265.dll找不到 中的某一個路徑找不到,因此也不安裝了

pacman -S mingw-w64-x86_64-libmp3lame? 這個好像不行,使用pacman -Sl 查找并沒有libmp3lame相關的,有一個是?mingw-w64-x86_64-gimp3,但是不知道是否就是libmp3lame,這應該也是為什么在這種安裝方式下,參考中的博客沒有將mp3弄進去的原因


?
# 需要單獨安裝make

pacman -S make

關于軟件包相關的默認路徑:

下載目錄:%MSYS2_HOME%/var/cache/pacman/pkg
安裝目錄:%MSYS2_HOME%/mingw64
%MSYS2_HOME%是指MSYS2的安裝目錄

cd /C/msys64new/home/Administrator/ffmpeg/ffmpeg-7.0


./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl ?--enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265

按照 如上有運行時異常,總是說libx265.dll有問題,錯誤如下,

這塊找了好久也沒有找到方案解決,因此直接 將 --enable-libx265 刪除了,重新build 了一版?

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl ?--enable-nonfree --enable-libfdk-aac --enable-libx264 


此時bin目錄中的ffmpeg、ffprobe、ffplay還是沒法使用的,因為缺少相關的dll,需要從%MSYS2_HOME%/mingw64/bin中拷貝,或者將%MSYS2_HOME%/mingw64/bin配置到環境變量Path中。

需要拷貝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc++-6、libx265、libx264-159、libfdk-aac-2? ,? libva_win32.dll

從?C:\msys64new\mingw64\bin 中拷貝數據到?C:\msys64new\usr\local\ffmpeg\bin

總結:

將 C:\msys64new\mingw64\bin 中的相關dll 拷貝到C:\msys64new\usr\local\ffmpeg\bin

將C:\msys64new\usr\local\ffmpeg\bin 設置為環境變量

四,安裝QT,以及配置QT

下載

本教程中選擇5.14.2版本(從5.15版本開始是收費版本)。

  • 下載地址:Index of /archive/qt/5.14/5.14.2
  • Windows系統選擇下載:qt-opensource-windows-x86-5.14.2.exe

勾選MinGW 64bit編譯器(我電腦的系統是64bit)。

如果后期想閱讀Qt源碼,就選擇勾選Qt源碼。

默認已經勾選了QtCreator。

解決控制臺中文亂碼

工具 -> 選項

文本編輯器 -> 行為 -> 文本編碼 -> 默認編碼。

每次運行Qt程序,你的控制臺可能都會出現以下警告信息:QT_DEVICE_PIXEL_RATIO已經過期。

Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use:QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.QT_SCREEN_SCALE_FACTORS to set per-screen DPI.QT_SCALE_FACTOR to set the application global scale factor.

解決方案:設置環境變量QT_SCALE_FACTOR為1即可。

 
#include "mainwindow.h"#include <QApplication>// 導入頭文件【也可以不導入,因為<QApplication>中已經包含了<QByteArray>】
// #include <QByteArray>int main(int argc, char *argv[]) {// 通過qputenv函數設置QT_SCALE_FACTOR為1qputenv("QT_SCALE_FACTOR", QByteArray("1"));QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

集成FFmpeg到Qt項目中

在Windows中,我們最終是通過調用FFmpeg動態庫(dll)中的函數來操作音視頻數據,使用dll的其中一種方式是需要用到3種文件:

  • .h:頭文件(Header File)
    • 包含了函數的聲明
    • 通過#include去導入相應的頭文件
  • .dll:動態鏈接庫(Dynamic Link Library)
    • 包含了函數的具體實現代碼
    • Windows程序會在運行過程中,動態調用dll中的函數
  • .lib.dll.a:(動態鏈接庫的)導入庫(Import Library)
    • .lib:用于MSVC編譯器中
    • .dll.a:用于MinGW編譯器中
    • 包含了dll中函數的入口,用于輔助找到并調用dll中的函數
    • 最終需要鏈接到Windows程序中(比如合并到exe文件中)

值得一提的是,在Windows中,靜態鏈接庫(Static Link Library)的擴展名也是.lib.dll.a。靜態鏈接庫和導入庫的區別是:

  • 靜態鏈接庫:包含了函數的具體實現代碼
  • 導入庫:不包含函數的具體實現代碼(函數的具體實現代碼存儲在dll中)

修改.pro文件

# 設置頭文件的目錄,以便編譯器能夠找到頭文件
INCLUDEPATH += %FFMPEG_HOME%/include
# 設置導入庫的目錄和需要鏈接的導入庫
LIBS += -L%FFMPEG_HOME%/lib \-lavcodec \-lavdevice \-lavfilter \-lavformat \-lavutil \-lpostproc \-lswscale \-lswresample

#號后面的內容是注釋
%FFMPEG_HOME%表示ffmpeg-4.3.2-2021-02-27-full_build-shared.7z解壓后的目錄
需要根據你的實際情況修改為真實的路徑
-L:設置導入庫的目錄,以便編譯器能夠找到導入庫
-l:設置需要鏈接的導入庫名稱
導入庫名稱需要去掉文件名前面的lib,比如libavcodec.dll.a就寫成avcodec

調用函數

main.cpp中調用av_version_info函數,獲取FFmpeg的版本信息。

 
#include "mainwindow.h"#include <QApplication>// 為了使用qDebug函數
#include <QDebug>// FFmpeg是C語言庫
// 有了extern "C",才能在C++中導入C語言函數
extern "C" {
#include <libavcodec/avcodec.h>
}int main(int argc, char *argv[]) {// 打印版本信息qDebug() << av_version_info();QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

拷貝dll文件

Qt程序編譯成功后,會生成一個exe文件exe是Windows中的一種可執行文件
我們編寫的程序代碼最終都存在了exe文件中
為了保證exe在運行時能成功調用FFmpeg的函數,那么就得讓exe能夠找到FFmpeg的dll文件(動態庫文件)。可以將%FFMPEG_HOME%/bin目錄中的所有dll文件拷貝到exe文件所在的目錄中,exe在運行的時候,能自動找到跟它同一目錄下的dll文件。

可以通過查看構建目錄得知exe文件所在的目錄。

運行程序后,如果能在控制臺看到當前ffmepg 的版本信息?字樣的輸出信息,說明FFmpeg已經集成成功。

問題記錄:

這里實際測試中還有一個問題,先記錄一下,但是原因暫時不知道:

實際開發中 只有使用 MinGW 64-bit這個才能build pass,并運行成功,使用其他的三個都有build error

假設我們開發好程序要給 user 的windows電腦上使用,那么user是不一定裝過ffmpeg,或者SDL的,因此我自己覺得好的做法,應該是如下的

在 03Recordaddtimer_home的 .pro文件中的寫法如下
INCLUDEPATH += ../include
DEPENDPATH += ../includeLIBS += -L../lib \-lavcodec \-lavdevice \-lavfilter \-lavformat \-lavutil \-lpostproc \-lswresample \-lswscale

這樣就能將.h文件 引入,將動態庫索引引入。

在執行的時候,還是會遇到 找不到各種dll的問題。

因此還需要將真正的dll文件放在 程序運行的exe 同一目錄下

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13581.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【paper】基于分布式采樣的多機器人編隊導航信念傳播模型預測控制

Distributed Sampling-Based Model Predictive Control via Belief Propagation for Multi-Robot Formation NavigationRAL 2024.4Chao Jiang 美國 University of Wyoming 預備知識 馬爾可夫隨機場&#xff08;Markov Random Field, MRF&#xff09; 馬爾可夫隨機場&#xff…

【Linux】使用AddressSanitizer分析內存非法使用問題

文章目錄 1 為什么需要AddressSanitizer&#xff1f;2 如何使用AddressSanitizer3 AddressSanitizer的原理4 總結 1 為什么需要AddressSanitizer&#xff1f; Valgrind是比較常用的內存問題定位工具&#xff0c;既然已經有了Valgrind&#xff0c;為什么還需要AddressSanitizer…

java 通過 microsoft graph 調用outlook(三)

這次會添加一個Reply接口&#xff0c; 并且使用6.10.0版本 直接上代碼 一&#xff0c; POM <!-- office 365 --><dependency><groupId>com.microsoft.graph</groupId><artifactId>microsoft-graph</artifactId><version>6.1…

域內 dcsync 權限維持

一、原理 DCSync 是域滲透中經常會用到的技術&#xff0c;其被整合在了 Mimikatz 中。在 DCSync 功能出現之前&#xff0c;要想獲得域用戶的哈希&#xff0c;需要登錄域控制器&#xff0c;在域控制器上執行代碼才能獲得域用戶的哈希。 Mimikatz的DCSync 功能&#xff1a; 該…

java8總結

java8總結 java8新特性總結1. 行為參數化2. lambda表達式2.1 函數式接口2.2 函數描述符 3. Stream API3.1 付諸實踐 java8新特性總結 行為參數化lambda表達式Stream Api 1. 行為參數化 定義&#xff1a;行為參數化&#xff0c;就是一個方法接受多個不同的行為作為參數&#x…

harmony 文件上傳

圖片上傳 1&#xff0c; 獲取文件&#xff0c;這里指的是圖片 在鴻蒙內部有一個API pick選擇器&#xff0c;實現文件保存和文件選擇的功能&#xff0c; 使用pick對象創建PhotoViewPicker實例 傳入必要的參數&#xff0c;如選擇圖片的數量&#xff0c;和彈出窗口的位置&#xf…

【機器學習】前沿探索,如何讓前端開發更加搞笑

在當今數字化時代&#xff0c;機器學習的崛起為前端開發帶來了巨大的機遇和挑戰。隨著人工智能和數據科學的不斷進步&#xff0c;前端工程師不再局限于傳統的界面設計和交互體驗&#xff0c;而是開始探索如何將機器學習技術融入到他們的工作中&#xff0c;以創造更加智能、個性…

面了一個程序員,因為6休1拒絕了我

人一輩子賴以生存下去的主要就考慮三件事&#xff0c;職業&#xff0c;事業&#xff0c;副業&#xff0c;有其1-2都是很不錯的。如果還沒到40歲&#xff0c;那不妨提前想下自己可能遇到的一些情況&#xff0c;提前做一些準備&#xff0c;未雨綢繆些。 今年整體就業大環境也一般…

【手寫大跟堆詳解】

文章目錄 大跟堆介紹大跟堆的結構大跟堆的應用場景大跟堆的代碼實現 大跟堆介紹 大根堆&#xff08;Max Heap&#xff09;是一種特殊的二叉樹結構&#xff0c;它滿足以下兩個條件&#xff1a; 1.完全二叉樹&#xff1a;大根堆是一棵完全二叉樹&#xff0c;即除了最后一層外&am…

一分鐘快速排序

這個 quick_sort 函數是一個實現快速排序&#xff08;Quicksort&#xff09;算法的遞歸函數。快速排序是一種高效的排序算法&#xff0c;通常用于對大規模數據集進行排序。以下是對該函數的詳細解釋&#xff1a; 函數簽名 void quick_sort(int q[], int l, int r)q[]&#xf…

Qt_電腦wifi相關操作

項目描述: 在做項目時用到了獲取wifi的操作。在網上查找了好久資料,這里做一些總結。 這里有顯示當前電腦wifi連接狀態,列出wifi列表,連接斷開wifi等函數。歡迎大家留言添加文章內容。 使用范圍: windows電腦(中文的環境) 使用技術:windows的cmd命令。和對字符串的解析…

C語言學習筆記--運算符與表達式(7521字爆肝)

上午好&#xff0c;本來想上午改簡歷下午學習c語言的&#xff0c;但想了一下上午精力充沛還是用來學習比較好&#xff0c;雖然現在失業了&#xff0c;但住在我姨家有吃有住的&#xff0c;再次感謝我姨&#xff0c;我要抓緊時間修改簡歷&#xff0c;然后找個工作搬出去&#xff…

【回憶版】數據科學思維與大數據智能分析 2024考試

填空&#xff08;18分&#xff09;18個 1.對數變換對大數值的范圍進行壓縮&#xff0c;對小數值的范圍進行擴展 2.提取出大量高頻率項與低頻率項相關聯的虛假模式&#xff0c;即交叉支持&#xff08;cross-support&#xff09;模式 3.信息論中&#xff08;&#xff09; 4.幾種…

[數據集][目標檢測]彈簧上料檢測數據集VOC+YOLO格式142張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;142 標注數量(xml文件個數)&#xff1a;142 標注數量(txt文件個數)&#xff1a;142 標注類別…

yolov8訓練自己數據集時出現loss值為nan。

具體原因目前暫未尋找到。 解決辦法 將參數amp改成False即可。 相關資料&#xff1a; https://zhuanlan.zhihu.com/p/165152789 https://github.com/ultralytics/ultralytics/issues/1148

【BUG】Edge|聯想電腦 Bing 搜索報錯“Ref A: 亂碼、 Ref B:亂碼、Ref C: 日期” 的解決辦法

文章目錄 省流版前言解決辦法 詳細解釋版前言問題描述與排查過程解決辦法與總結 省流版 前言 我也不清楚咋滴了&#xff0c;Bing 搜索突然偶爾報錯&#xff1a; 換了代理關了插件都報錯。 參考&#xff1a; 我在用bing搜索時出現了如下代碼&#xff0c;導致bing無法使用&am…

nginx proxy_set_header詳解

proxy_set_header 是 Nginx 配置中的一個重要指令&#xff0c;特別是在使用 Nginx 作為反向代理時。該指令允許你修改由 Nginx 傳遞給代理后端的請求頭。這對于確保后端應用程序能夠接收到正確的客戶端信息&#xff08;如 IP 地址、主機名等&#xff09;以及控制緩存行為等場景…

1 計算機硬件-CPU-校驗碼-存儲系統-輸入輸出設備-總線結構

計算機硬件 考情分析&#xff1a;趨勢很小&#xff0c;22年考過&#xff0c;根據趨勢以后考的可能較小 基本組成&#xff1a;運算器&#xff0c;控制器&#xff0c;儲存器&#xff0c;輸入設備&#xff0c;輸出設備運算器和控制器也統稱為中央處理單元&#xff08;CPU&#xf…

【算法訓練 day37 檸檬水找零、長度最小的子數組、用最少數量的箭引爆氣球】

目錄 一、檸檬水找零-LeetCode 860思路實現代碼個人問題總結 二、根據身高重建隊列-LeetCode 406思路實現代碼個人問題總結 三.用最少數量的箭引爆氣球-LeeCode 406思路實現代碼個人問題總結 一、檸檬水找零-LeetCode 860 Leecode鏈接: leetcode 860 文章鏈接: 代碼隨想錄 視頻…

解鎖Nginx跨域謎題:3步打造安全高效的CORS策略

Nginx作為一款強大的Web服務器和反向代理服務器&#xff0c;經常被用于處理跨域資源共享&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;策略&#xff0c;以允許或限制不同源之間的資源請求。CORS是一種安全策略&#xff0c;用于決定Web瀏覽器是否應允…