AWS云计算问答式知识库系统的实现
AWS平台上建立一个生成式人工智能专业文文档问答式网站,前端用Flask框架,后端用Fast API,前端调用后端的唯一API来完成大模型文档搜索的功能,使用AWS Bedrock里的Titan和Llama3模型,以及OpenAI 4.0 API来调用模型并提供内部的配置参数以供选择,向量数据库用langchain和faiss库,在Sagemaker中访问S3里PDF文件逐页导入内容,生成单独向量数据库文件搜索文档,以及用Amazon Kendra文档智能搜索服务实现搜索文档,作为另一种实现,通过配置参数来选择,最后将前端和后端用Docker打包镜像文件,上传到AWS ECS中运行。请详细地设计这样的一种应用程序的实现和部署方式,并给出关键部分的Python代码实现。
这是一个相对复杂的任务,涉及多个AWS服务、AI模型、以及前后端技术的集成。我们可以将其拆分成几个模块,逐步实现。
1. 系统架构设计
首先,我们设计一个清晰的架构:
- 前端: 使用 Flask 创建一个简单的Web应用,提供用户交互界面,让用户上传PDF文档并输入查询内容。
- 后端: 使用 FastAPI 提供API接口,处理来自前端的请求,调用各种AI模型进行推理,或者查询本地的向量数据库(FAISS)/Kendra服务。
- 文档存储: 使用 S3 存储PDF文件,SageMaker 中的模型和服务来提取文档内容并生成向量。
- 模型选择: 提供Titan和Llama3模型在AWS Bedrock中进行选择,或者调用OpenAI 4.0的API。提供一个接口让前端选择并切换模型。
- 向量存储与搜索: 使用 FAISS 和 LangChain 来存储和查询文档的向量,另外通过 Kendra 提供文档智能搜索功能作为备选。
- 容器化与部署: 使用 Docker 打包应用并将其部署到 AWS ECS 中,保证服务的可伸缩性和高可用性。
2. 前端部分:Flask应用
Flask应用将负责向用户展示上传文件和查询输入的页面。用户输入的查询请求将通过AJAX传递给后端API。
# app.py - Flask Frontend Application
from flask import Flask, render_template, request, jsonify
import requestsapp = Flask(__name__)# FastAPI backend URL
BACKEND_URL = "http://<backend-service-url>/api/query"@app.route('/')
def index():return render_template('index.html')@app.route('/submit_query', methods=['POST'])
def submit_query():query = request.form['query']selected_model = request.form['model']response = requests.post(BACKEND_URL, json={'query': query, 'model': selected_model})data = response.json()return jsonify(data)if __name__ == '__main__':app.run(debug=True)
Flask应用提供了一个简单的HTML表单,用户输入查询并选择模型后,将请求发送到FastAPI后端进行处理。
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document Search</title>
</head>
<body><h1>Document Query Interface</h1><form id="queryForm"><label for="query">Query:</label><input type="text" id="query" name="query" required><label for="model">Choose a Model:</label><select id="model" name="model"><option value="Titan">Titan</option><option value="Llama3">Llama3</option><option value="OpenAI">OpenAI 4.0</option></select><button type="submit">Submit</button></form><div id="result"><h2>Search Results:</h2><pre id="response"></pre></div><script>document.getElementById('queryForm').onsubmit = async function(event) {event.preventDefault();const query = document.getElementById('query').value;const model = document.getElementById('model').value;const response = await fetch('/submit_query', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({query, model}),});const result = await response.json();document.getElementById('response').textContent = JSON.stringify(result, null, 2);};</script>
</body>
</html>
3. 后端部分:FastAPI应用
FastAPI应用将负责接收前端的请求,调用AWS服务(如AWS Bedrock,OpenAI,FAISS,或Kendra),并返回查询结果。
# main.py - FastAPI Backend Application
from fastapi import FastAPI, Query
from pydantic import BaseModel
import openai
import boto3
import os
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA# AWS Configurations
BEDROCK_CLIENT = boto3.client('bedrock', region_name='us-west-2')
S3_CLIENT = boto3.client('s3')# OpenAI API Key
openai.api_key = os.getenv("OPENAI_API_KEY")# Define a model selection object
class QueryRequest(BaseModel):query: strmodel: strapp = FastAPI()@app.post("/api/query")
async def query(request: QueryRequest):query = request.querymodel = request.modelif model == "OpenAI":response = openai.Completion.create(model="gpt-4",prompt=query,max_tokens=150)return {"response": response['choices'][0]['text']}elif model == "Titan":response = BEDROCK_CLIENT.invoke_model(ModelId="titan-1",Body=query)return {"response": response['Body'].read().decode()}elif model == "Llama3":# Assuming use of Llama3 in a similar fashion to Titanresponse = BEDROCK_CLIENT.invoke_model(ModelId="llama3-1",Body=query)return {"response": response['Body'].read().decode()}else:return {"error": "Model not supported."}@app.post("/api/upload_document")
async def upload_document(file: bytes):# Save to S3s3_response = S3_CLIENT.put_object(Bucket="my-bucket", Key="document.pdf", Body=file)return {"status": "success", "s3_key": s3_response["Key"]}@app.get("/api/search_vector")
async def search_vector(query: str):# Load the FAISS indexvector_store = FAISS.load_local("faiss_index")retriever = vector_store.as_retriever()# Perform vector searchresult = retriever.get_relevant_documents(query)return {"results": result}
4. FAISS 和 LangChain 集成
对于文档的向量化,我们使用 LangChain 和 FAISS。首先,从S3获取PDF文件,使用SageMaker进行内容提取,然后将提取的文本进行嵌入向量化,最后存储到FAISS数据库中。
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import PyPDFLoader
from langchain.chains import RetrievalQA
import boto3# S3获取PDF文件
def load_pdf_from_s3(bucket, key):s3 = boto3.client('s3')obj = s3.get_object(Bucket=bucket, Key=key)return obj['Body'].read()# 文档向量化
def process_pdf_to_faiss(pdf_file):loader = PyPDFLoader(pdf_file)pages = loader.load_and_split()# Create embeddingsembeddings = OpenAIEmbeddings()vectorstore = FAISS.from_documents(pages, embeddings)# Save FAISS indexvectorstore.save_local("faiss_index")
5. AWS Sagemaker与PDF处理
使用 SageMaker 进行PDF文本提取。可以使用 Boto3
和 SageMaker
SDK 来调用预训练模型(如Tesseract OCR)。
import boto3def process_pdf_with_sagemaker(pdf_file_path):sagemaker_client = boto3.client('sagemaker-runtime')with open(pdf_file_path, 'rb') as f:payload = f.read()response = sagemaker_client.invoke_endpoint(EndpointName='your-endpoint-name',Body=payload,ContentType='application/pdf',Accept='application/json')return response['Body'].read().decode()
6. 部署与容器化
使用 Docker 创建容器镜像,并将其上传到 ECR,然后通过 ECS 部署。
# Dockerfile
FROM python:3.10-slimWORKDIR /app# 安装必要的依赖
COPY requirements.txt .
RUN pip install -r requirements.txt# 复制项目文件
COPY . .# 启动 Flask + FastAPI 服务
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# 构建镜像
docker build -t your-app-name .# 登录 AWS ECR
aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com# 将镜像推送到ECR
docker tag your-app-name:latest <aws_account_id>.dkr.ecr.<region>.amazonaws.com/your-repository:latest
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/your-repository:latest
通过 ECS 设置 Fargate 服务,确保容器自动扩展和管理。
7. 总结
上述设计实现了一个生成式人工智能文档问答系统,整合了多个AWS服务(Bedrock、SageMaker、Kendra等)以及前后端技术。关键组件包括PDF文档的处理和存储、AI模型的调用、向量搜索的实现等。
相关文章:
AWS云计算问答式知识库系统的实现
AWS平台上建立一个生成式人工智能专业文文档问答式网站,前端用Flask框架,后端用Fast API,前端调用后端的唯一API来完成大模型文档搜索的功能,使用AWS Bedrock里的Titan和Llama3模型,以及OpenAI 4.0 API来调用模型并提供…...
【C语言】库函数常见的陷阱与缺陷(4):内存内容操作函数
目录 一、memcmp函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 比较范围限制问题 1.2.2. 数据类型兼容性隐患 1.2.3. 其它 1.3. 安全使用建议 1.4. 代码示例 二、memcpy函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.2.1. 缓冲区溢出风险 2.2.2. 重叠内存区域处理隐患 …...
Java 类与对象的详细讲解
引言 在Java中,类(Class)和对象(Object)是面向对象编程(OOP)的核心组成部分。通过它们,我们可以创建复杂的数据结构,并实现代码的重用性和可维护性。本文将深入探讨Java…...
Python爬虫之使用BeautifulSoup进行HTML Document文档的解析
BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库,它为开发者提供了一种简单的方式来查找、遍历和修改文档树。BeautifulSoup 特别擅长处理不规则或格式不佳的标记语言,可以自动更正无效的 HTML,因此在网页抓取(Web Sc…...
vue2 纯前端实现像chatGpt一样的文字流式输出
1、先展示一下效果啦 文字流输出 2、首先确定接口返回的是字符串,那就先调取接口 // 由于需求关系 有很多个文本需要一起逐字输出 所以这里就采用了Promise.all的形式 async getThreeTextarea() {let taskArray [ "重点项目文本","应用领域文本&qu…...
基于PHP课堂签到系统的设计与实现
摘 要 随着教育业的迅速发展和学生人数的不断增加,导致在班级登记制度中传统的“点到”方式不能适应学校的实际需要。从而需要设计一个好的课堂签到系统将会对课堂签到管理工作带来事半功倍的效果。文章着重介绍了基于实践应用的班级签到系统的开发流程,…...
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…...
51c深度学习~合集9
我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里叶特征 (Fourier Feature)与核回归 位置编码背后的理论解释 本文探讨了位置编码背后的理论基础,特别是傅里叶特征(Fourier Feature)与核回归(Kern…...
前端流式播放TTS语音:技术细节与实现
摘要 本文将介绍如何在前端实现流式播放文本到语音(TTS)的语音,并加入确保语音播放不重叠的改进方案。我们将探讨使用Web Audio API和WebSocket进行实时语音播放的技术细节,并提供相应的代码示例。 一、引言 在之前的讨论中&am…...
数据结构面试题整理
1. 简述什么是数据结构? 数据结构就是一种组织和存储数据的方式,使得我们可以高效地访问和修改数据。就像你整理房间一样,不同的物品有不同的收纳方式,数据也有不同的存储和管理方法。 比如,数组就像一个排成一排的抽…...
前端实现浏览器自定义滚动条
前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结ÿ…...
Oracel 统计信息收集
1. 常规的通过PLSQL客户端进行统计信息收集,需要指定用户名和表名 begin dbms_stats.gather_table_stats(ownname > &owner, tabname > &tablename, estimate_percent > DBMS_STATS.AUTO_SAMPLE_SIZE, cascade > TRUE, degree > 4, m…...
openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection
文章目录 openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection概述笔记环境光最好弱一些在设备标定时,吸嘴上不要装绿色屏蔽片如果吸嘴不在底部相机中间,先检查设置底部相机坐标调整底部相机坐标 吸嘴校验的细节底部相机坐…...
Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决
在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。 想要在Windows上安装Docker(实际上是基…...
光伏电站建设成本利润估算
截至2024年9月底,全国光伏发电装机容量达到7.7亿千瓦,同比增长48.4%。其中集中式光伏4.3亿千瓦,分布式光伏3.4亿千瓦。2024年前三季度,全国光伏发电量6359亿千瓦时,同比增长45.5%。全国光伏发电利用率97.2%,同比下降1.1个百分点.早在今年2月份,中国光伏行业协会名誉理…...
TimesFM(Time Series Foundation Model)安装(2)
TimesFM(Time Series Foundation Model)安装简介 readme TimesFM(Time Series Foundation Model)安装简介(1)-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144359861?spm1001.2014.3001…...
【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
并发模式 下例重新对 channel 的用法进行回顾: package mainimport ("fmt""math/rand""time" )func msgGen(name string) chan string {c : make(chan string)go func(name string) { // 在这个 goroutine 当中向外发送数据i : 0fo…...
Blue Ocean 在Jenkins上创建Pipeline使用详解
BlueOcean是Jenkins的一个插件,它提供了一套可视化操作界面来帮助用户创建、编辑Pipeline任务。以下是对BlueOcean中Pipeline操作的详细解释: 一、安装与启动BlueOcean 安装:在Jenkins的“系统管理”->“插件管理”->“可选插件”中搜索“BlueOcean”,然后点击“Ins…...
【数字花园】个人知识库网站搭建:②本地部署数字花园
目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案数字花园网站的本地部署方案数字花园网站本地手动部署方案1. 获取网站源码2.2 安装 Node.js 3. 项目部署3.1 安装项目依赖3.2 构建项目3.3 启动http服务器 4. 本地预览5. 在笔记更新后:更新本地源码…...
监听H5页面在微信浏览器异常退出
参考文章 onBeforeUnmount(() > {unNormalExit(); });//---------------------------异常退出---------------------- function unNormalExit() {enterOrExitRoom({type: 37,roomId: roomId.value,userId: userId.value,nickName: name.value,loginUserType: 2, //0 专家 1…...
【汽车】-- 常见的汽车悬挂系统
汽车悬挂系统是车辆的重要组成部分,其主要功能是连接车轮和车身,减缓路面颠簸对车身的影响,提高行驶的平顺性、舒适性和操控性。以下是常见的汽车悬挂系统类型及其特点: 1. 独立悬挂系统 每个车轮可以独立上下运动,不…...
路由器、二层交换机与三层交换机的区别与应用
路由器、二层交换机和三层交换机是常见的网络设备,常常协同工作。它们都可以转发数据,但在功能、工作层级以及应用场景上存在差异。 1. 工作层级 三者在OSI模型中的工作层级不同: 路由器: 工作在 网络层(第三层&#…...
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测 目录 CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测任务中实现…...
xss原理分析与剖析
001 URL编码 URL只允许用US-ASCII字符集中可打印的字符(020—0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用。这里有个需要注意的,加号代表URL编码的空格,%20也是。 URL编码最长见的是在用GET/POST传输时&…...
如何使用PageAdmin CMS网站管理系统搭建网站?
一、什么叫CMS? CMS,即内容管理系统,是一种位于网站前台界面与后台数据库之间的软件系统。它能够实现网站内容的发布、编辑、管理、维护等操作,使得非专业人员也能轻松进行网站内容的更新与维护。 二、如何使用PageAdmin CMS网站管…...
Linux: shell: bash: set -x;调试使用
man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...
高级排序算法(二):归并排序与堆排序详解
引言 在上一章中,我们探讨了高效的快速排序及其分治思想。这一次,我们将继续探索两种同样重要的排序算法:归并排序(Merge Sort) 和 堆排序(Heap Sort)。 它们与快速排序一样,都是O(…...
doxygen–自动生成文档工具
原文地址:doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档,解析类、函数、参数相关信息,并生…...
5G学习笔记之SNPN系列之ID和广播消息
目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…...
登录授权的实现:json web token + redis + springboot
文章目录 引言I token实现思路传统JWT TOKEN认证方式改进的JWT TOKEN认证方式redis设计II java代码实现登录接口退出登录接口登录之后接口(token解析和校验)III 常见问题400引言 应用场景: 登录认证 I token实现思路 传统JWT TOKEN认证方式 RESTful API TOKEN认证方式:…...
AlexNet:开启深度学习图像识别新纪元
一、引言 在深度学习的璀璨星空中,AlexNet 无疑是一颗极为耀眼的明星。它于 2012 年横空出世,并在 ImageNet 竞赛中一举夺冠,这一历史性的突破彻底改变了计算机视觉领域的发展轨迹,让全世界深刻认识到深度卷积神经网络在图像识别任…...
鸿蒙面试-----鸿蒙组件生命周期详解
不同颜色的是必须要会的,黑色的参考一下,只写了一些用过的还有很多组件的生命周期都没写 组件的生命周期有那些? 我了解的有、系统组件的生命周期、页面和自定义组件的生命周期、UIAbility组件的生命周期,Navigation组件生命周期…...
Meta Llama 3.3 70B:性能卓越且成本效益的新选择
Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...
asp.net老项目运维,出现的问题6之数据库
数据库会有很多张表,表内一般会有自增列,如果想统一管理这个自增数值,可以使用如下方法,放在一个存储过程中,想用的时候调用存储过程即可生成数据库层面的全局唯一值: create procedure [dbo].[P_getSeqID…...
WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里
背景 升级过程中发现有很多新的知识点,虽然未来可能永远都不会再遇到,但是仍然是一次学习的好机会,可以让自己知道,打包软件的进化之路,和原来 Webpack 4 版本的差异在哪里。 移除的依赖记录 babel/register: 在 Nod…...
什么是JVM即时编译
什么是JVM即时编译 即时编译是JVM的核心功能,他让java在性能上不输于C/C JVM(Java Virtual Machine)即 Java 虚拟机,是一种用于执行 Java 字节码的虚拟计算机。它是 Java 程序的运行核心,提供了一个独立于底层操作系统…...
《经验分享 · 软考系统分析师》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
HC-SR04 超声波测距模块驱动总结
一、基本原理 1.1. 引脚功能 VCC电源 (需要5V直流电源)GND地Trig信号触发脉冲 (>10us TTL脉冲)Echo输出TTL电平信号, 电平持续时间与距离程正比 1.2. 电气特性 工作电压5V工作电流15mA工作频率40kHz射程范围0.02 ~ 4m (参考值,不同厂家质量可能也不一样)测量精度1mm (理…...
VMware:CentOS 7.* 连不上网络
1、修改网络适配 2、修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-e33# 修改 ONBOOTyes 3、重启网卡 service network restart 直接虚拟机中【ping 宿主机】,能PING通说明centOS和宿主机网络通了,只要宿主机有网,则 Ce…...
【自动驾驶】单目摄像头实现自动驾驶3D目标检测
🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理(自动选择CPU或GPU&#x…...
40分钟学 Go 语言高并发:微服务架构设计
微服务架构设计 一、知识要点总览 核心模块重要性掌握程度服务拆分高深入理解DDD领域驱动设计接口设计高掌握RESTful和gRPC设计规范服务治理高理解服务注册、发现、熔断、限流等机制部署策略中掌握DockerK8s容器化部署方案 二、详细内容讲解 1. 服务拆分 服务拆分是微服务…...
【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟
这几年蓝桥杯比赛比较适合学生技能学习,考虑板子功能,提出完成的任务。 要求在液晶完成如下图效果: 主要是实现液晶显示时钟和数字时钟,具体样式可以依据实际情况微调。 实现过程: 1.需要画圆(外圆、内圆…...
Micropython 扩展C模块<HelloWorld>
开发环境 MCU:Pico1(无wifi版)使用固件:自编译版本开发环境:MacBook Pro Sonoma 14.5开发工具:Thonny 4.1.6开发语言:MicroPython 1.24 执行示例 在github上获取micropython,我使…...
数据分析学习Day1-使用matplotlib生成2小时每分钟的气温可视化分析图
注意:需要提前下载matplotlib包 pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple import matplotlib.pyplot as plt import random# 数据准备 x list(range(121)) # 使用 list() 转换为列表 y [random.randint(15,28) for i in range(121)]…...
域渗透-域内密码喷洒
域内密码喷洒 密码喷洒配合用户枚举使用,先进行枚举再进行喷洒 为什么不爆破,而是喷洒: 规避账户锁定策略 学习怎么设置密码锁定策略: 在工具找到组策略管理,在域下的Default Domain右键点击编辑 在计算机配置>…...
5G Multi-TRP R16~R18演进历程
提升小区边缘用户的性能,在覆盖范围内提供更为均衡的服务质量,NR中引入了多TRP协作传输的方案。多TRP协作传输通过多个TRP之间进行非相干联合传输(Non Coherent-Joint Transmission,NC-JT)、重复传输/接收或…...
Android 屏幕采集并编码为H.264
前言 我们前面基于摄像机的图像采集以及编解码已经完成了,那么接下来计划后面的三篇博文分别实现Android屏幕采集实现并进行H.264编解码、MIC音频采集并编码为AAC以及AAC解码播放,希冀可以通过这六篇博文能够对Android上面的音视频编解码有一个初步的学…...
xuggle操作视频
文章目录 xuggle操作视频 xuggle操作视频 有个需求是要读取视频的宽高,找到了Xuggle和FFmpeg两种方式,FFmpeg很强大,但是我并不需要那些功能,所以使用了轻量一点的Xuggle 引入依赖 <dependency><groupId>xuggle<…...
Python|Pyppeteer实现自动获取eBay商品数据【进阶版】(27)
前言 本文是该专栏的第27篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 在本专栏的上一篇文章中,笔者有详细介绍基于python中的pyppeteer,“根据目标关键词,来实现自动获取eBay的商品数据”。而本文,笔者将在上一篇文章《Python|Pyppeteer实现自动获取eBa…...
Android Studio新版本的一个资源id无法找到的bug解决
Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…...