学习日志——高光谱遥感数据

179 阅读5分钟

2024-12-02

1. 学习高光谱遥感基本知识

在学习的过程中了解到主成分分析、支持向量机(但还没有实操过,明天试试)、全色图像(详细理解RGB图像、全色图像、多光谱图像、高光谱图像-CSDN博客

2024-12-03

1. 实现从图像中提取曲线(批量)

难点:目前getdata.exe只能一次手动处理一张,而且准确率不高

解决方法:写脚本(Script,又称为扩建,用来控制软件应用程序),暂未实现

思考:该怎么把光谱曲线提取出来?并且记录物质、时空信息?

2. 实现批量下载文献(根据doi)

import requests
from bs4 import BeautifulSoup
import os
import threading
import time
from queue import Queue
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# 设置下载文献存储的文件夹路径
path = r"E:\工作日志\2024_12_2_getdata\文献\输出文献"  # 这里要换
if not os.path.exists(path):
    os.makedirs(path)

# 日志文件路径
error_log_path = os.path.join(path, "error.log")

# 请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/129.0.0.0 Safari/537.36"
}

# Sci-Hub 域名
scihub_domain = "https://sci-hub.usualwant.com/"  # 这个域名经常变化,网页查完更换

# 重试策略
retry_strategy = Retry(
    total=5,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504],
    allowed_methods=["HEAD", "GET", "OPTIONS"]  # 更新为 allowed_methods
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.headers.update(headers)
http.mount("https://", adapter)
http.mount("http://", adapter)


# 下载文献的函数
def download_paper(doi):
    url = f"{scihub_domain}/{doi}"
    pdf_url = ""  # 初始化 pdf_url 避免 UnboundLocalError
    try:
        # 发送HTTP请求并解析HTML页面
        response = http.get(url, timeout=10)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, "html.parser")

        # 解析得到文献下载链接
        iframe = soup.find("iframe")
        if iframe:
            pdf_url = iframe.get("src")
        else:
            embed = soup.find("embed")
            if embed:
                pdf_url = embed.get("src")

        if not pdf_url:
            raise ValueError("文献下载链接获取失败.")

        # 处理链接前缀
        if pdf_url.startswith('//'):
            pdf_url = 'https:' + pdf_url
        elif not pdf_url.startswith('http'):
            pdf_url = f"{scihub_domain}/{pdf_url}"

        # 下载文献并保存到文件
        pdf_response = http.get(pdf_url, timeout=20)
        pdf_response.raise_for_status()

        pdf_filename = os.path.join(path, doi.replace("/", "_") + ".pdf")
        with open(pdf_filename, "wb") as pdf_file:
            pdf_file.write(pdf_response.content)

        print(f"{doi} 文献下载成功.")
        time.sleep(0.1)  # 防止频繁请求Sci-Hub,设置适当的延迟

    except Exception as e:
        with open(error_log_path, "a", encoding="utf-8") as error_log:
            error_log.write(f"{doi} 下载失败!\n")
            if pdf_url:
                error_log.write(f"下载url链接为: {pdf_url}\n")
            error_log.write(f"错误信息: {e}\n\n")
        print(f"{doi} 下载失败: {e}")


# 读取包含DOI号的txt文件并下载文献
def main():
    doi_file_path = r"E:\工作日志\2024_12_2_getdata\文献\doi.txt"  # 已经是绝对路径
    with open(doi_file_path, "r", encoding="utf-8") as file:
        dois = [doi.strip() for doi in file.readlines()]

    # 创建下载队列
    queue = Queue()

    # 将DOI号加入队列
    for doi in dois:
        if doi:
            queue.put(doi)

    # 下载任务函数
    def worker():
        while not queue.empty():
            doi = queue.get()
            download_paper(doi)
            queue.task_done()

    # 设置线程数
    thread_count = 4
    threads = []

    # 创建并启动线程
    for _ in range(thread_count):
        thread = threading.Thread(target=worker)
        thread.daemon = True  # 设置为守护线程,程序退出时自动结束
        threads.append(thread)
        thread.start()

    # 等待所有线程完成
    queue.join()

    # 可选:等待所有线程结束
    for thread in threads:
        thread.join()


if __name__ == "__main__":
    main()

3. 19:00开会

项目:文本知识库(可能不带时空信息) 科研:影像➡模型(带有时空信息),文本可以为影像的验证

2024-12-04

1. OCR技术

昨天的批量提取图像中的曲线识别不了,师兄说试试OCR技术,于是我今天来学习一下。【另外:说一个不相干的话,我打算每天至少看两篇文献,这样才能达到导师说的博士得看几千篇文献,36542=2920】

OCR:Optical Character Recognition,光学字符识别。本质是把图像形状转变为文本字符。【一文讲通OCR文字识别原理与技术全流程 - 知乎

OCR技术的实现,总体上可以分为五步:预处理图片切割字符识别字符恢复版面后处理文字。(中间三步是核心,首尾两步最难)

image.png

2024-12-05

我看出来了,我真的好拖延......改正!!!

1. 改批量下载文献的代码

文献下载之后保存的pdf都是以doi命名的,不方便之后根据pdf查重、以及提取光谱曲线。还有就是Harzing's Publish or Perish这个软件查文献的时候只能指定一个最大文献数目,但不能统计出所有文献,目前想的是每一年查找1000篇(可能还要再细分不同搜索源的),最后汇总使用Python删去重复的文件名。

16:30:解决了上述的问题,实现了根据doi批量下载文献,并且以Article Title命名。输入为wbs导出的文献excel表文献保存的位置save_path。出现了新的问题:速度很慢,基本3s下载一篇,但是原来不改之前的代码是可以做到1s下载1-2篇,原因是我缺少多线程那部分的代码,现在进行改进。

17:30:解决多线程问题。吃饭~

2024-12-06

作为一个Ph追求者,显然我还有一个很大的问题:下班太早了啊啊啊!!!从今天开始,吃完晚饭不回宿舍,因为不知道从何时起就已经没锻炼了~~ 或者就算回宿舍休息七点也一定要来实验室!!!

9:30:看论文《Plot2Spectra: an Automatic Spectra Extraction Tool》

  1. 介绍

XANES:Xray Abortion Near Edge Structure,X射线吸收近边缘结构

Raman spectroscopy:拉曼曲线

Plot2Spectra: ①坐标轴对齐(自动检测),坐标轴信息(场景文本检测器自动提取)②描点:自动

  1. 相关工作

目标检测:基于 CNN 的目标检测模型可分为两类:基于锚点的方法和无锚点的方法。锚点(anchor)是一组预定义的边界框,用于将直接预测问题转化为残差学习问题(预定义的边界框与真实值之的残差问题)

场景文本识别、实例分割

  1. 具体应用

① EXCLAIM:从科学图表中自动提取、分离图像和图表标题的一个Python包。(github.com/MaterialEye…)

Requirements: query: can be a JSON or Python dictionary and must have the parameters(/keys/attributes) defined in the Query JSON schema and examples can be found in the query directory.

最重要的是读懂这个Query JSON文件

image.png