SendGrid
- https://sendgrid.kke.co.jp/plan/
- 100通/日: 無料
- 0.2円/通
Mailtrap
- https://mailtrap.io/ja/pricing/
- 1000 通/月: 無料
import numpy as np | |
import pandas as pd | |
import argparse | |
def load_points_from_tsv(path: str) -> tuple[np.ndarray, np.ndarray]: | |
df = pd.read_csv(path, sep='\t') | |
if not all(col in df.columns for col in ['ID', 'position.x', 'position.y', 'position.z']): | |
raise ValueError("必要な列 'ID', 'position.x', 'position.y', 'position.z' が見つかりません") | |
ids = df['ID'].values |
import cv2 | |
import numpy as np | |
import glob | |
import os | |
import argparse | |
def calibrate_fisheye(folder_path, pattern_size=(9, 6), square_size=1.0, save_path='fisheye_camera_params.npz'): | |
# 3D座標の準備(Z=0平面) | |
objp = np.zeros((1, pattern_size[0] * pattern_size[1], 3), np.float32) | |
objp[0, :, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2) |
import cv2 | |
import numpy as np | |
import glob | |
import os | |
import argparse | |
def calibrate_from_folder(folder_path, pattern_size=(9, 6), square_size=1.0, save_path='camera_params.npz'): | |
# 実世界のチェスボード上の交点の3D座標(Z=0の平面上) | |
objp = np.zeros((pattern_size[0] * pattern_size[1], 3), np.float32) | |
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2) |
SendGrid
Mailtrap
#!/bin/bash | |
set -eu | |
if [ $# -lt 1 ]; then | |
cat << __USAGE__ | |
Usage: | |
$0 <instruction> | |
Example: |
#!/bin/bash | |
for kv in $(< $1) | |
do | |
if [[ "$kv" = ^\s*$ ]] || [[ "$kv" =~ ^# ]]; then | |
continue | |
fi | |
export $kv | |
done |
#!/bin/bash | |
set -e | |
# optparse | |
if [ $# -ge 1 ]; then | |
SOURCE_BRANCH=$1 | |
else | |
echo "ERROR: source branch not specified" | |
exit 1 |
#!/bin/sh | |
set -xe | |
if [ $# -eq 0 ]; then | |
echo "usage: <input_mp4>" | |
exit 1 | |
fi | |
f1=$1 |
#!/bin/sh | |
set -eu | |
VERSION="4.10.1" | |
JAR_DIR="/tmp/antlr4" | |
if [ ! -d "$JAR_DIR" ]; then | |
mkdir -p "$JAR_DIR" |