semvec/pypi-packages huggingface dataset:
u0-stitcher 0.1.6
stitcher for two fisheye camera

# pano

全景图像拼接

原本是想解决网络遥控车的视角太小，不能有效观察周围情况问题，找到了广角镜头。
后来发现竟然可以用两个超过180°的摄像头拼接全景图片。

但是在网上没有找到效果好的实时全景传输项目，所以自己做一个。

我理解的全景图片生成应该主要是3个步骤
1、把图片摊平，这个步骤的学名未知。可能是将鱼眼原图（等角图片）展开成等距图片。
2、将两个鱼眼镜头的等距图分成3份，并进行水平拼接
3、拼接图按照给定的角度在还原成等角图

为了可以做到即时（30FPS），需要尽可能的提高效率。
目前最大的效率瓶颈是在拼接上。

## 调研拼接3张水平图片效率  

技术上打算采用opencv 的 stitcher，先试试看。

`opencv 用 4.X 吧，尽量用新一点的东西。`

## 2023-05-24 进展

目前的拼接还是完全自己写的，原因是所有第三方提供的方案均不能有效的对我的图片进行拼接。
可能是我的参数有问题，但是我的需求相对简单并且我对拼接效率有要求，所以就自己写了。

写的过程还是挺顺利的，由于我的摄像头是背靠背绑在一起的，所以他们的水平同步和角度偏差是不大的，所以我放弃了拼接时进行旋转和扭曲。
拼接中对图片只有平移，这对图片首尾相连还是很有帮助的。

目前拼接的图片效果还是不错的，拼接效率上没有测试，从代码上看起来，应该是足够高效的。

## 封装思路

为了更加模块化，封装思路如下：
1、贯彻单视频流方案，虽然涉及拼装切分，单比起双倍的编码和解码，还是要好很多的。所以输入的视频流是两个摄像头的拼接视频流。
横向拼接，分辨率一致，帧率一致，编码一致，码率一致。
这里可以简化成输入两张（一张）图片，视频流的处理还是放到视频流的相关模块中。
2、校准主副镜头，由于目前的两个摄像头都是usb摄像头，usb的可插拔等特性导致，每次启动时，主副镜头的顺序都可能不一致，所以需要校准。
3、校准主副镜头的图像，即圆心+半径。这里由于是超级广角，所以图像是一个圆，但是随着镜头的物理位置不稳定，需要进行校准。这里会强制要求两个图片的半径一致，即获得的等距投影图分辨率一致。
4、拼接矫正，尝试用等距投影进行拼接。
以上校准全部保存校准结果至本地文件，当本地文件不存在，强制要求校准，否则不需要校准。如果有必要可以随时进行校准。
5、拼接输入图片，这是一个全流程，输入一张图片（横向拼接原图输入），输出一张图片（等距投影拼接）。

暂时封装成一个类。

## 2023-05-25 进展

基础功能完成，在比较合适的图片上表现还是挺好的，但是在一些特殊情况，比如校准时的距离与实际视频距离有较大变化的情况下，拼接效果就不好了。

所以可能需要手动或者自动进行不断的校准。
ecape-py 0.0.2
Calculate the entraining CAPE (ECAPE) of a parcel.
Requires Python: >=3.7

# ecape-py

ecape-py is a simple module that contains an entraining CAPE, or ECAPE, calculation described by Peters et. al. 2023.
Additionally, Peters et. al. 2023 -provided MatLab scripts serve as a reference and test verification data.
The module leans heavily on Metpy for meteorological calculations.

[![PyPI - Version](https://img.shields.io/pypi/v/ecape-py.svg)](https://pypi.org/project/ecape-py)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ecape-py.svg)](https://pypi.org/project/ecape-py)

Installation
------------

```console
pip install ecape-py
```

Documentation, Source
-------------
https://github.com/citylikeamradio/ecape-py
https://citylikeamradio.github.io/ecape-py/html/index.html

Contact
-------------
 - Robert Capella
 - bob.capella@gmail.com
 - https://twitter.com/minusthebob

Future Work
-------------
 - if useful, incorporate into MetPy
 - provide .nc, .csv, & aws support
 - provide just-in-time compiling support for faster 2D work

References
------------
Ryan M. May, Sean C. Arms, Patrick Marsh, Eric Bruning, John R. Leeman, Kevin Goebbert, Jonathan E. Thielen, Zachary S Bruick, and M. Drew. Camron. Metpy: a Python package for meteorological data. 2023. URL: Unidata/MetPy, doi:10.5065/D6WW7G29.

John Peters. ECAPE scripts. 2 2023. URL: https://figshare.com/articles/software/ECAPE_scripts/21859818, doi:10.6084/m9.figshare.21859818.v4.

John M. Peters, Daniel R. Chavas, Hugh Morrison, Chun-Yian Su, and Brice E. Coffer. An analytic formula for entraining cape in mid-latitude storm environments. 2023. arXiv:2301.04712.

Licence
------------

`ecape-py` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
lank 0.6.2
Listening Anchor Nodes for K

# LANK

## Listening Anchor Nodes for K

In service of:
- **L**abels
- **A**ddresses (peer discovery)
- **N**ames
- **K**eys

## Installation

LANK is easy to install using pip:
```
pip install lank
```

## Usage

Once installed, simply run the `lank` command from any terminal.

## Author

Created by Shawn A. Wilson [lannocc@yahoo.com] aka LANNOCC.
AaronBlaser-SDK 1.0.1
SDK for the lord of the rings API

# LordOfTheRings SDK

## Installation

```bash
pip install AaronBlaser-SDK==1.0.1
```

## Usage

1. Import the LordOfTheRings class

```python
from lordoftherings import LordOfTheRings
```

2. Initialize the class with your API Token

```python
api = LordOfTheRings('YOUR API TOKEN')
```

3. Make calls to the API

- /movie
```python
all_movies = api.movies().get_all().fetch()
```
- /movie/{id}
```python
movie = api.movies("5cd95395de30eff6ebccde56").get()
```
- /movie/{id}/quote
```python
movie_quotes = api.movies("5cd95395de30eff6ebccde5b").quotes.get_all().fetch()
```
- /quote
```python
quotes = api.quotes().get_all().fetch()
```
- /quote/{id}
```python
single_quote = api.quotes("5cd96e05de30eff6ebccebc9").get()
```

4. Make calls using sorting, filtering, and pagination

- Filtering
```python
match = api.movies().get_all().filter_by(name='The Lord of the Rings Series').fetch() 
negate_match = api.movies().get_all().filter_by(name=('not', 'The Lord of the Rings Series')).fetch() 
include = api.movies().get_all().filter_by(name=['The Lord of the Rings Series', 'The Desolation of Smaug']).fetch()
exclude = api.movies().get_all().filter_by(name=[('not', 'The Lord of the Rings Series'), ('not', 'The Desolation of Smaug')]).fetch()
less_than = api.movies().get_all().filter_by(budgetInMillions=('<', 100)).fetch() 
greater_than = api.movies().get_all().filter_by(runtimeInMinutes=('>', 160)).fetch()
```

- Sorting
```python
sorted_movies = api.movies().get_all().sort_by("name:asc").fetch()
```

- Pagination
```python
paged_movies_1 = api.movies().get_all().limit(2).fetch()
paged_movies_2 = api.movies().get_all().limit(3).page(2).fetch()
paged_movies_3 = api.movies().get_all().limit(1).page(1).offset(1).fetch()
```

- Combine all Three
```python
filter_sorted_paged = api.movies().get_all().limit(5).filter_by(name=('not', 'The Lord of the Rings Series')).sort_by('name:asc').fetch()
```

## Testing

1. Unit Tests

There is a file called test_lordoftherings.py in the tests folder that has some unit tests in it. Run this file to run the tests

- Replace with your token
    ```python
    self.auth_token = 'YOUR API TOKEN'
    ```

2. Example Usage File

There is a file called test_usage.py in the tests that has many examples of how you can use this SDK. Add your auth token and uncomment
the examples you want to run, then run the file.

- Replace with your token
    ```python
    api = LordOfTheRings('YOUR API TOKEN')
    ```