CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

日本語を英訳するAndroidアプリをPydroidでプログラミング

2025-02-14 05:21:43 | python
英訳アプリのPydroidソースコードをDeepSeekで書いてもらった。

import tkinter as tk
from tkinter import ttk
from googletrans import Translator
import pykakasi

# ローマ字を日本語に変換する関数
def romaji_to_japanese(text):
kks = pykakasi.kakasi()
result = kks.convert(text)
japanese_text = "".join([item['hira'] for item in result])
return japanese_text

# 翻訳関数
def translate_text():
input_text = input_box.get("1.0", tk.END).strip()
if input_text:
# ローマ字を日本語に変換
japanese_text = romaji_to_japanese(input_text)
intermediate_box.delete("1.0", tk.END)
intermediate_box.insert("1.0", japanese_text)
# 日本語を英語に翻訳
translator = Translator()
translated = translator.translate(japanese_text, src='ja', dest='en')
output_box.delete("1.0", tk.END)
output_box.insert("1.0", translated.text)

# メインウィンドウの作成
root = tk.Tk()
root.title("和文英訳アプリ (ローマ字入力対応)")
root.geometry("500x400")

# 入力ボックス
input_label = ttk.Label(root, text="ローマ字で日本語を入力してください:")
input_label.pack(pady=5)
input_box = tk.Text(root, height=5, width=50)
input_box.pack(pady=5)

# 翻訳ボタン
translate_button = ttk.Button(root, text="翻訳", command=translate_text)
translate_button.pack(pady=10)

# 中間表示ボックス(ローマ字→日本語変換結果)
intermediate_label = ttk.Label(root, text="変換された日本語:")
intermediate_label.pack(pady=5)
intermediate_box = tk.Text(root, height=5, width=50)
intermediate_box.pack(pady=5)

# 出力ボックス
output_label = ttk.Label(root, text="英語訳:")
output_label.pack(pady=5)
output_box = tk.Text(root, height=5, width=50)
output_box.pack(pady=5)

# アプリの実行
root.mainloop()


googletransというライブラリとpykakasiという謎のライブラリをインポートしている。
試しに「賄賂裁判官が逮捕された。」を英訳させようとしたのだが、Pydroidは日本語キーボードが使えないので、ローマ字に置き換えてから英訳するようにしてみた。


お見事!!!

ちなみに「chinpo」と入力すると・・・www
p e n i sと英訳してくれるwww

さらに…www

これはさすがにヤバいだろ?www



クレジットカード決済システムのPythonコード

2025-02-09 07:46:05 | python
以下は、PythonのTkinterを使用したシンプルなクレジットカード決済システムのGUIプログラム例です。基本的な入力検証とルーンアルゴリズムによるカード番号の検証を含んでいます。

```python
import tkinter as tk
from tkinter import ttk, messagebox
from datetime import datetime

class CreditCardPaymentGUI:
def __init__(self, root):
self.root = root
self.root.title("クレジットカード決済システム")
# 変数の初期化
self.card_number = tk.StringVar()
self.card_holder = tk.StringVar()
self.exp_month = tk.StringVar()
self.exp_year = tk.StringVar()
self.cvv = tk.StringVar()

# GUIコンポーネントの作成
self.create_widgets()

def create_widgets(self):
# スタイル設定
style = ttk.Style()
style.configure("TLabel", padding=5, font=('Helvetica', 10))
style.configure("TButton", padding=5, font=('Helvetica', 10))

# 入力フィールド
ttk.Label(self.root, text="カード番号:").grid(row=0, column=0, sticky=tk.W)
card_entry = ttk.Entry(self.root, textvariable=self.card_number, width=25)
card_entry.grid(row=0, column=1, columnspan=2)

ttk.Label(self.root, text="名義人:").grid(row=1, column=0, sticky=tk.W)
ttk.Entry(self.root, textvariable=self.card_holder, width=25).grid(row=1, column=1, columnspan=2)

ttk.Label(self.root, text="有効期限:").grid(row=2, column=0, sticky=tk.W)
self.create_expiration_dropdowns()

ttk.Label(self.root, text="CVV:").grid(row=3, column=0, sticky=tk.W)
ttk.Entry(self.root, textvariable=self.cvv, width=8).grid(row=3, column=1, sticky=tk.W)

# 送信ボタン
ttk.Button(self.root, text="支払いを実行", command=self.process_payment).grid(row=4, column=1, pady=10)

def create_expiration_dropdowns(self):
# 月のドロップダウン
months = [f"{m:02d}" for m in range(1, 13)]
self.exp_month.set(datetime.now().strftime("%m"))
ttk.Combobox(self.root, values=months, textvariable=self.exp_month, width=5).grid(row=2, column=1)

# 年のドロップダウン
current_year = datetime.now().year
years = [str(y) for y in range(current_year, current_year + 11)]
self.exp_year.set(str(current_year))
ttk.Combobox(self.root, values=years, textvariable=self.exp_year, width=5).grid(row=2, column=2)

def process_payment(self):
try:
# 入力検証
if not self.validate_inputs():
return

# ここで実際の決済処理を実装
# (この例ではシミュレーションのみ)
messagebox.showinfo("成功", "決済が正常に完了しました!")
self.root.destroy()

except Exception as e:
messagebox.showerror("エラー", f"処理中にエラーが発生しました: {str(e)}")

def validate_inputs(self):
# カード番号の検証
card_num = self.card_number.get().replace(" ", "")
if not (card_num.isdigit() and len(card_num) == 16):
messagebox.showerror("エラー", "無効なカード番号です")
return False

if not self.luhn_check(card_num):
messagebox.showerror("エラー", "カード番号が正しくありません")
return False

# 名義人検証
if len(self.card_holder.get().strip()) < 3:
messagebox.showerror("エラー", "無効な名義人名です")
return False

# 有効期限検証
exp_date = datetime(int(self.exp_year.get()), int(self.exp_month.get()), 1)
if exp_date < datetime.now().replace(day=1):
messagebox.showerror("エラー", "カードは有効期限切れです")
return False

# CVV検証
cvv = self.cvv.get()
if not (cvv.isdigit() and len(cvv) in (3, 4)):
messagebox.showerror("エラー", "無効なCVVコードです")
return False

return True

def luhn_check(self, card_num):
total = 0
reverse_num = card_num[::-1]
for i, digit in enumerate(reverse_num):
n = int(digit)
if i % 2 == 1:
n *= 2
if n > 9:
n -= 9
total += n
return total % 10 == 0

if __name__ == "__main__":
root = tk.Tk()
app = CreditCardPaymentGUI(root)
root.mainloop()
```

このプログラムの主な特徴:

1. 入力検証機能:
- カード番号のルーンアルゴリズムチェック
- 有効期限の日付検証
- CVVコードの長さと数値チェック
- 名義人の最低文字数チェック

2. GUI要素:
- クレジットカード情報入力フォーム
- 月/年のドロップダウン選択
- レスポンシブなレイアウト
- エラーメッセージ表示

3. セキュリティ機能:
- センシティブな情報を実際に処理しない(デモ用)
- 基本的な入力フォーマットチェック

4. ユーザーフレンドリーな設計:
- 現在の年月をデフォルトで設定
- 明確なエラーメッセージ
- 直感的なインターフェース

実際の決済システムで使用するには、以下の拡張が必要です:

1. 実際の決済ゲートウェイAPIとの連携
2. データ暗号化
3. PCI DSSコンプライアンスへの対応
4. より高度なエラーハンドリング
5. ロギング機能
6. マルチスレッド処理
7. 3Dセキュア認証の統合

注意:このコードはデモンストレーション目的のみで、実際の決済処理には使用しないでください。本番環境でクレジットカード情報を扱う場合は、PCI DSS規格に準拠した適切なセキュリティ対策が必要です。







肺癌が発生しやすい部位はどこか?

2025-02-06 06:48:18 | python
肺がんが最も発生しやすい部位は、**肺の上葉(特に右上葉)**です。肺がんには主に以下のようなタイプがあり、それぞれ発生しやすい部位が異なりますが、一般的に上葉が多いとされています。

### 主な肺がんのタイプと発生しやすい部位:
1. **肺腺がん(せんがん)**
- 肺がんの中で最も多いタイプで、**肺の末梢(外側部分)**に発生しやすいです。特に上葉で発見されることが多いです。

2. **扁平上皮がん**
- 主に**肺門部(気管支付近)**で発生します。喫煙との関連が強く、太い気管支に沿ってがんができることが多いです。

3. **小細胞肺がん**
- 急速に進行するがんで、**肺門部や中心部**(気管支付近)で発生することが多いです。喫煙者に多く見られます。

4. **大細胞がん**
- 肺の末梢部から中心部まで幅広い部位で発生しますが、特に末梢部で見られることが多いです。

### 上葉に多い理由:
- 肺の上葉は喫煙や外部からの有害物質が蓄積しやすい構造になっているため、がんの発生率が高いとされています。

### 統計的特徴:
- **肺腺がん**が多く発見される部位として、右肺の上葉が特に多いことが報告されています。
- **喫煙**が関連する扁平上皮がんや小細胞肺がんは、気管支付近に多く発生します。

したがって、**肺上葉**および**気管支付近**が肺がんの高リスク部位とされています。

骨の部分を消去した肺のX線写真からさらに気管と気管支を消去するAIプログラム

2025-02-06 05:56:55 | python
の記事からの続き

気管および気管支の軟骨部分を消去するには、通常、深層学習によるセグメンテーションモデル(例:U-Net、Mask R-CNN)が必要です。ただし、簡易的な方法として画像処理を組み合わせて実装するデモを示します。以下のコードは、気管支の輪郭を検出し、それらの領域を除去する形で動作します。

---

### 必要なライブラリのインストール:
```bash
pip install opencv-python pillow numpy
```

---

## プログラムコード:
```python
import tkinter as tk
from tkinter import filedialog, messagebox
import cv2
import numpy as np
from PIL import Image, ImageTk

# グローバル変数
img = None
processed_img = None

def select_image():
global img, img_display, processed_img
# ファイル選択ダイアログ
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png")])
if not file_path:
return

# 画像をグレースケールで読み込む
img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
img_display = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 表示用に変換

# tkinter表示用に変換
img_display_pil = Image.fromarray(cv2.cvtColor(img_display, cv2.COLOR_BGR2RGB))
img_display_tk = ImageTk.PhotoImage(img_display_pil)

# キャンバスに表示
canvas.create_image(0, 0, anchor=tk.NW, image=img_display_tk)
canvas.image = img_display_tk

def remove_bones_and_cartilage():
global img, processed_img

if img is None:
messagebox.showerror("エラー", "画像を選択してください。")
return

# ステップ1: ヒストグラム平坦化で骨と気管の輪郭を強調
equalized_img = cv2.equalizeHist(img)

# ステップ2: ガウシアンぼかしで不要なノイズを除去
blurred_img = cv2.GaussianBlur(equalized_img, (5, 5), 0)

# ステップ3: 骨・気管軟骨部分の検出(閾値処理)
_, thresholded_img = cv2.threshold(blurred_img, 180, 255, cv2.THRESH_BINARY)

# ステップ4: 気管の輪郭を検出し、マスクを生成
contours, _ = cv2.findContours(thresholded_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros_like(img)

# 大きい輪郭のみをマスクとして採用(気管・気管支部分の除去)
for contour in contours:
if cv2.contourArea(contour) > 1000: # 小さすぎる領域を除外
cv2.drawContours(mask, [contour], -1, (255), thickness=cv2.FILLED)

# ステップ5: 元画像から気管および骨部分を除去
mask_inv = cv2.bitwise_not(mask)
processed_img = cv2.bitwise_and(img, img, mask=mask_inv)

# tkinter表示用に変換
processed_pil = Image.fromarray(processed_img)
processed_tk = ImageTk.PhotoImage(processed_pil)

# キャンバスに表示
canvas.create_image(0, 0, anchor=tk.NW, image=processed_tk)
canvas.image = processed_tk

# GUIの初期化
root = tk.Tk()
root.title("X線画像の骨および気管軟骨除去")
root.geometry("800x600")

# キャンバスの作成
canvas = tk.Canvas(root, width=800, height=500, bg="gray")
canvas.pack()

# ボタンの配置
button_frame = tk.Frame(root)
button_frame.pack()

select_button = tk.Button(button_frame, text="画像を選択", command=select_image)
select_button.grid(row=0, column=0, padx=10, pady=10)

process_button = tk.Button(button_frame, text="骨および気管軟骨を除去", command=remove_bones_and_cartilage)
process_button.grid(row=0, column=1, padx=10, pady=10)

# メインループの開始
root.mainloop()
```

---

### 説明:
1. **画像の選択**
- ユーザーが選んだX線画像をキャンバスに表示します。

2. **骨および気管軟骨部分の除去**
- ヒストグラム平坦化とガウシアンぼかしで骨や気管の輪郭を強調。
- 閾値処理で骨や気管部分の領域を二値化し、輪郭を検出します。
- 一定以上のサイズの輪郭のみを選択し、マスクとして除去します。

3. **結果の表示**
- 処理後の画像をキャンバスに再描画します。

---

### 改良ポイント:
このプログラムは画像処理技術を用いた簡易的なデモです。精度を向上させるためには、次のような改良が考えられます:
- **深層学習モデルの導入**
U-NetやMask R-CNNなどのセグメンテーションモデルを使用し、気管や気管支の軟骨を高精度に検出・除去する。
- **データセットの事前学習**
X線画像に特化した大規模なデータセットを用いて事前学習し、骨や気管軟骨のセグメンテーションモデルを構築することで、より正確な結果が期待できます。

肺のX線写真から骨の部分を判別して消去するAIプログラム

2025-02-06 05:41:36 | python
以下は、肺のX線写真から骨の部分を判別して消去するAIプログラムを、Pythonで `tkinter` を使ってGUIで実装する例です。骨の除去には、深層学習の手法を応用する必要がありますが、簡易的なデモとしてここでは画像処理ライブラリを使い、骨領域の検出にフィルタリング技術を用います(完全な深層学習モデルを使うには事前に学習させたモデルが必要です)。

### 必要なライブラリ
- tkinter(GUI用)
- OpenCV(画像処理用)
- NumPy(行列処理)
- Pillow(画像の表示)

まず、次のコマンドで必要なライブラリをインストールしてください:
```bash
pip install opencv-python pillow numpy
```

### コード
```python
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import cv2
import numpy as np
from PIL import Image, ImageTk

def select_image():
global img, img_display, processed_img
# ファイル選択ダイアログ
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png")])
if not file_path:
return
# 画像を読み込む
img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
img_display = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # グレースケールからBGR変換(表示用)

# tkinter表示用に変換
img_display_pil = Image.fromarray(cv2.cvtColor(img_display, cv2.COLOR_BGR2RGB))
img_display_tk = ImageTk.PhotoImage(img_display_pil)

# キャンバスに表示
canvas.create_image(0, 0, anchor=tk.NW, image=img_display_tk)
canvas.image = img_display_tk

def process_image():
global img, processed_img

if img is None:
messagebox.showerror("エラー", "画像を選択してください。")
return
# 骨領域を強調するためにヒストグラム平坦化を行う
equalized_img = cv2.equalizeHist(img)

# 骨を強調しすぎた領域をぼかす
blurred = cv2.GaussianBlur(equalized_img, (5, 5), 0)

# 骨と肺のコントラストを高めるために閾値処理を適用
_, thresholded = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)

# 骨領域を消去するためのマスク作成
mask = cv2.bitwise_not(thresholded)

# 元の画像にマスクを適用し、骨領域を除去
processed_img = cv2.bitwise_and(img, img, mask=mask)

# tkinter表示用に変換
processed_pil = Image.fromarray(processed_img)
processed_tk = ImageTk.PhotoImage(processed_pil)

# キャンバスに表示
canvas.create_image(0, 0, anchor=tk.NW, image=processed_tk)
canvas.image = processed_tk

# GUIの初期化
root = tk.Tk()
root.title("X線画像の骨領域除去")
root.geometry("800x600")

# キャンバスの作成
canvas = tk.Canvas(root, width=800, height=500, bg="gray")
canvas.pack()

# ボタンの配置
button_frame = tk.Frame(root)
button_frame.pack()

select_button = tk.Button(button_frame, text="画像を選択", command=select_image)
select_button.grid(row=0, column=0, padx=10, pady=10)

process_button = tk.Button(button_frame, text="骨領域を除去", command=process_image)
process_button.grid(row=0, column=1, padx=10, pady=10)

# メインループの開始
root.mainloop()
```

### 説明
1. **画像の選択**
`select_image()` 関数で画像ファイルを選び、キャンバス上に表示します。

2. **骨領域の処理**
`process_image()` 関数で簡易的な骨領域検出を行い、骨を除去した画像を表示します。
- ヒストグラム平坦化で骨を強調。
- ガウシアンぼかしで平滑化。
- 閾値処理で骨領域を抽出し、マスクを作成。

3. **結果の表示**
処理した画像をキャンバス上に再描画します。

### 改良ポイント
- このプログラムは簡易的なデモです。実際に深層学習を用いて高精度で骨領域を除去するには、事前に学習させたU-Netなどのセグメンテーションモデルを読み込み、AIによるマスク生成を行う必要があります。

1H-NMRスペクトル解析Pythonプログラムで分子構造解析・定性分析

2025-01-11 21:31:32 | python
学生時代、NMRスペクトル解析についてしっかり学ばずに卒業してしまい、めちゃくちゃ後悔している。
実験・実習でもNMRスペクトル解析は一回しかやらず、しかもNMR分析装置はいじらせてもらえず、技官が操作していた。

実験・実習は二人一組の班でやっていて、分析するサンプルは二つの班で一本、共同で分析に出していた。

IRも液クロもガスクロも、分析化学の教授がノート持ち込み可の楽勝で単位を取れるやさしい先生だったので、単位が取れただけで何も身に付かず後悔している。

NMRスペクトルのグラフをAIで分析したら、簡単に分子の構造がわかり、何の分子かまで判定出来てしまうのでは?と甘く考えていたが、実際はそうでもないらしい。

官能基ごとにピークの数、ピークの位置、ピークの面積が決まっているらしいから、OCRリーダーみたいにチャチャッと結果が出ると思った。










import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import numpy as np
import matplotlib.pyplot as plt
from skimage import io, color
from scipy.signal import find_peaks
from sklearn.cluster import KMeans

class NMRAnalyzer:
def __init__(self, root):
self.root = root
self.root.title("NMRスペクトル解析ツール")
self.label = tk.Label(root, text="NMRスペクトル解析ツール", font=("Helvetica", 16))
self.label.pack()
self.canvas = tk.Canvas(root, width=600, height=400, bg="white")
self.canvas.pack()
self.upload_button = tk.Button(root, text="画像をアップロード", command=self.upload_image)
self.upload_button.pack()
self.analyze_button = tk.Button(root, text="解析開始", command=self.analyze_spectrum)
self.analyze_button.pack()
self.quit_button = tk.Button(root, text="終了", command=root.quit)
self.quit_button.pack()
self.image = None
self.spectrum_data = None
def upload_image(self):
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg;*.bmp")])
if file_path:
self.image = Image.open(file_path)
self.image = self.image.resize((600, 400))
self.img_tk = ImageTk.PhotoImage(self.image)
self.canvas.create_image(300, 200, image=self.img_tk)
messagebox.showinfo("成功", "画像が正常にアップロードされました!")
def analyze_spectrum(self):
if not self.image:
messagebox.showerror("エラー", "まず画像をアップロードしてください。")
return
# 画像をグレースケールに変換し、スペクトルデータを抽出
img_array = np.array(self.image.convert("L"))
spectrum = img_array.mean(axis=0)
# ピークの検出
peaks, properties = find_peaks(spectrum, height=50)
peak_heights = properties['peak_heights']
# AI解析 (KMeansクラスタリングでピークの分類)
kmeans = KMeans(n_clusters=len(peaks), random_state=0, n_init=10)
peak_positions = np.array(peaks).reshape(-1, 1)
kmeans.fit(peak_positions)
# 結果の可視化
plt.figure(figsize=(10, 6))
plt.plot(spectrum, label="NMR Spectrum")
plt.scatter(peaks, spectrum[peaks], color='red', label="Detected Peaks")
plt.xlabel("Pixel Index")
plt.ylabel("Intensity")
plt.title("NMR Spectrum Analysis")
plt.legend()
plt.show()
# 結果の表示
result_text = f"検出されたピーク数: {len(peaks)}\n"
result_text += f"ピーク位置: {peaks}\n"
result_text += f"ピーク積分値: {peak_heights.sum():.2f}\n"
messagebox.showinfo("解析結果", result_text)

if __name__ == "__main__":
root = tk.Tk()
app = NMRAnalyzer(root)
root.mainloop()

要求されたライブラリをインストールしてみたものの、skimageだけはうまくいかず、エラーがでて動かない。

πを20桁まで求めるPythonコード

2025-01-11 12:41:28 | python





from decimal import Decimal, getcontext

# 小数点以下20桁まで計算する精度を設定
getcontext().prec = 21 # 整数部+小数点+20桁 = 21桁

# 円周率を計算する(アルキメデスの方法に基づくライプニッツの公式)
def calculate_pi():
pi = Decimal(0)
k = 0
while k < 100000: # ループ回数を多めに設定して精度を上げる
pi += Decimal((-1)**k) / Decimal(2*k + 1)
k += 1
return pi * 4

# πを計算して表示
pi_value = calculate_pi()
print(f"π (20桁まで): {pi_value}")


高性能心電図AI診断システムKORBATO SCAN

2024-11-23 05:31:51 | python

わずか一枚の心電図だけで心疾患を検出!?ベテラン医師も驚く高精度の診断支援AI

わずか一枚の心電図だけで心疾患を検出!?ベテラン医師も驚く高精度の診断支援AI

様々なAIの登場で今後の診療現場はどう変化するのか?『医療AIを追う』シリーズ。心疾患の早期発見に特化した医療AI技術「KORBATO SCAN」を開発した、医師の八木氏に話を伺...

DOC WEB

AI診断システムはどの分野が穴場か?ちょっと探ってみたら、心電図がその一つであることが判明した。

ちなみに最近「python3年生 ディープラーニングのしくみ」をKindleで読み終えたところだ。
※ちなみにこの「python3年生 ディープラーニングのしくみ」はKindleunlimitedでは期間限定で無料で読めるのだ!


心電図はフーリエ変換も絡んでくるはずだ。個々の部位が由来の合成波なので、フーリエ変換にて合成波を分解すればどこが病原であるか判明するのだ。

先日、ヤフオクで心電図の本の入札で競り負けて悔しい思いをした。
本のカテゴリーは人気がなく、競り合いになることも滅多にないため、舐めてかかっていた。





【教材まとめ】これ全部やったら流石に誰でもつよつよAIエンジニアになれる

2024-11-13 11:02:51 | python



【教材まとめ】これ全部やったら流石に誰でもつよつよAIエンジニアになれる - Qiita

【教材まとめ】これ全部やったら流石に誰でもつよつよAIエンジニアになれる - Qiita

はじめに本記事ではAI知識ゼロから始めてAIエンジニアとして実務にチャレンジできるレベルを目指してロードマップ形式でコンテンツをまとめました。生成AIの台頭、SakanaAI...

Qiita

俺がAIを使うとしたら画像診断だ。
最近思いついた使用法は眼底写真を使った目の病気の画像診断。
当然先行者がいることは折込済であったが、自分で取組んでみたいのだ。








眼底写真の画像診断で緑内障を早期に症状が現れる前に見つけ出し、早めの治療や進行を遅らせるために役立てたいと思った。

究極のPython。JIT Python。JITコンパイラ搭載。

2024-07-31 02:17:16 | python

高速化のエンジニアリング。注文してから0.722秒。100倍速いぞ!Python : 75.884 C++ : 3.392   JIT Python : 0.722   JITコンパイラで高速化されたコードを自動生成するツール。 - Qiita

高速化のエンジニアリング。注文してから0.722秒。100倍速いぞ!Python : 75.884 C++ : 3.392   JIT Python : 0.722 JITコンパイラで高速化されたコードを自動生成するツール。 - Qiita

ショートストーリー: 「秘密のJITプログラム」古代のプログラミング王国には、数々の魔法のツールが存在しました。その中でも、特に伝説的な存在が「JITの魔法の本」でした...

Qiita




JIT Python

JITコンパイラで高速化されたコードを自動生成するツール。


遅いPythonをC++より速くするJITコンパイラ。

そのJITコンパイラを搭載したのがJIT Python。

究極のPython、それがJIT Pythonだ。

EXCEL曜日書き込みツールを作らせた。

2024-05-06 18:37:15 | python




「A列に2024/05/01という形式で日付を書き込んだEXCEL表ファイルがあり、

これを2024年5月1日という形式に書き換えて、B列に曜日を書き込め。」

これだけの簡単なことなのに20回くらいCHATGPTに修正させる羽目になった。




import tkinter as tk
from tkinter import filedialog
import xlrd
import xlwt
from datetime import datetime

def calculate_weekday(input_date):
try:
# 日付文字列を日付オブジェクトに変換
date_obj = datetime.strptime(input_date, '%Y年%m月%d日')
# 曜日を返す
weekday_names = ['月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日']
return weekday_names[date_obj.weekday()]
except ValueError:
# 日付の形式が無効な場合はエラーメッセージを返す
return '日付の形式が無効です'

def process_excel(filename):
try:
# Excelファイルを開く
workbook = xlrd.open_workbook(filename, formatting_info=True)
sheet = workbook.sheet_by_index(0)

# 新しいExcelブックを作成
new_workbook = xlwt.Workbook()
new_sheet = new_workbook.add_sheet(sheet.name)

# 日付と曜日を書き込む
for row in range(sheet.nrows):
input_date = sheet.cell_value(row, 0)
if isinstance(input_date, float):
input_date_str = datetime(*xlrd.xldate_as_tuple(input_date, workbook.datemode)).strftime('%Y年%m月%d日')
else:
input_date_str = input_date
new_sheet.write(row, 0, input_date_str) # 日付を書き込む
weekday = calculate_weekday(input_date_str)
new_sheet.write(row, 1, weekday) # 曜日を書き込む

# 新しいExcelファイルの保存
new_filename = filename.replace('.xls', '_updated.xls')
new_workbook.save(new_filename)
return f'曜日が書き込まれました。新しいファイル "{new_filename}" に保存されました。'
except Exception as e:
return f'エラーが発生しました: {str(e)}'

def browse_file():
# ファイル選択ダイアログを表示し、選択されたファイルのパスを取得
filename = filedialog.askopenfilename(filetypes=[("Excel files", "*.xls")])

if filename:
result_label.config(text='処理中...')
result = process_excel(filename)
result_label.config(text=result)

# メインウィンドウの作成
root = tk.Tk()
root.title('Excel曜日書き込みツール')

# ファイル選択ボタン
browse_button = tk.Button(root, text='Excelファイルを選択', command=browse_file)
browse_button.pack(pady=10)

# 結果表示ラベル
result_label = tk.Label(root, text='')
result_label.pack()

# ウィンドウを表示
root.mainloop()




ちなみに新しくファイルを作れとは指示していないが、勝手に新しくファイルを作って書き直しするようになっている。本当は上書き保存でよかったのだが・・・



※このツールを作るきっかけは、親会社の若造にコケにされたことである。日付を入れていってその隣に手打ちで曜日を入れている俺を見て、何も力技でしなくともwwwと言われた。

それからA1で図面をプリントアウトして欲しいと所長に言われ、出力用紙を単純にA1としたら、A1のサイズの用紙にA4の原稿が印刷されてしまい、印刷設定ですったもんだしたし、この若造もあれっ?あれっ?となって焦っていた。結局、ベテラン社員から「お前らこんなこともできねーのかよ?www」とバカにされた。

これもPythonでコーディングしてexe化して職場に持ち込んでやろうかと思っている。

任意のサイズの原稿をA1サイズの用紙に入るように拡大し、ど真ん中に配置されるように上下左右の余白を自動で設定できるようにしたい。

俺はエクセルワードを極めたとしても、その仕事専門で採用されないから敢えてワードしかやらなかったし、エクセルも仕事で使う機会もなかったから必要性を感じずに放置していた。誰かがテンプレートを用意していて、そこに数字や文字などをブチ込むだけで事足りた。



希少がんである神経膠腫の画像評価精度を向上させるAI技術

2024-03-29 20:50:45 | python

希少がんである神経膠腫の画像評価精度を向上させるAI技術を開発

希少がんである神経膠腫の画像評価精度を向上させるAI技術を開発

富士フイルムと国立がん研究センターは、MRI画像から神経膠腫の疑いのある領域を精密に抽出するAI技術を開発した。神経膠腫の治療前画像を高精度に評価できるようになるため...

MONOist

グリオーマ(神経膠腫)の画像診断AIを富士フイルムと国立ガン研が開発したとのこと。
「患者数が少ないため臨床データ数が限られており、これまで神経膠腫に特化したAI技術は存在しなかった。」ということで日本初、いや世界初か?

データ数が少ないものほど、開発の難易度が上がるらしい。
の顔認証方式の入退場記録アプリは、少ないサンプル数で精度も高かった。

このアプリのソースコードを使えばより少ないサンプル数で高精度な画像診断が可能になるかもしれない。

医用画像ディープラーニングの本が届いた!

2024-03-24 13:00:40 | python


このシリーズは3巻あるらしいことが、受け取った後で判明した。
ちなみに1巻目は具体的なソースコードが書かれておらず、
【またつまらぬものを切ってしまった】
ではなく、
【またつまらぬものを買ってしまった】
という羽目に。
2巻目は第2章にNetral Network Console、第3章にDIGITSを使ったディープラーニング、第4章には医用画像データの取り扱いについて書かれているらしいから、2巻目も買おうと思う。

3巻目は、
環境構築から始まり、データの準備・前処理といった内容や具体的なソースコードが書かれていて、胸部X線画像をサンプルとした解説があった。

ほんの入口に過ぎないかもしれないが、こういう類の本はほとんど出版されておらず、大変貴重だと思う。

医用画像ディープラーニング入門

2024-03-17 17:59:12 | python
医療AIとディープラーニングシリーズ 医用画像ディープラーニング入門 (医療AIとディープラーニングシリーズ No. 1) https://amzn.asia/d/3M9Etuo

Pythonやるならディープラーニング!
ディープラーニングやるなら医用画像診断!

とりあえずヤフオクで入札。
多分、落札できるはずだ。
早く手に入らないかな?楽しみだ。

ちなみに、
標準 医用画像のためのディープラーニング 実践編 も入札した。

OCRリーダープロトタイプ作成

2024-01-23 22:04:23 | python
Tesseractのインストールパスを次のように指定するだけで動くようになった。環境構築とか環境変数とかパスがどうのこうのとか難しいことは抜きにして、Tesseractをインストールするだけで済むようになっている。
C:Program FilesTesseract-OCR esseract.exe

各自Tesseractをどこにインストールしたか覚えておいて、上記の部分を書き換えれば良い。もちろんPyQt5とかライブラリのインストールもpip install ライブラリ名で忘れずに。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QLabel, QTextEdit, QFileDialog
from PyQt5.QtGui import QPixmap, QImage, QFont
from PIL import Image as PilImage
import pytesseract

class OCRApp(QMainWindow):
def __init__(self):
super().__init__()

self.image_path = None

# Tesseractのインストールパスを指定
tesseract_path = r'C:Program FilesTesseract-OCR esseract.exe'
pytesseract.pytesseract.tesseract_cmd = tesseract_path

self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)

self.init_ui()

def init_ui(self):
layout = QVBoxLayout()

self.image_label = QLabel("画像がここに表示されます")
layout.addWidget(self.image_label)

file_button = QPushButton("ファイルを選択", self)
file_button.clicked.connect(self.select_file)
layout.addWidget(file_button)

ocr_button = QPushButton("OCR実行", self)
ocr_button.clicked.connect(self.perform_ocr)
layout.addWidget(ocr_button)

self.result_text = QTextEdit("OCR結果がここに表示されます")
layout.addWidget(self.result_text)

self.central_widget.setLayout(layout)

def select_file(self):
options = QFileDialog.Options()
options |= QFileDialog.ReadOnly
file_path, _ = QFileDialog.getOpenFileName(self, "ファイルを選択", "", "Images (*.png *.jpg *.jpeg);;All Files (*)", options=options)
if file_path:
self.image_path = file_path
self.display_selected_image()

def display_selected_image(self):
try:
pil_image = PilImage.open(self.image_path)
pil_image = pil_image.resize((300, 300)) # サイズを適当に変更

qimage = self.pil_image_to_qimage(pil_image)
pixmap = QPixmap.fromImage(qimage)

self.image_label.setPixmap(pixmap)
except Exception as e:
self.result_text.setPlainText(f"Error: {str(e)}")

def pil_image_to_qimage(self, pil_image):
width, height = pil_image.size
bytes_per_line = 3 * width
image = QImage(pil_image.tobytes("raw", "RGB"), width, height, bytes_per_line, QImage.Format_RGB888)
return image

def perform_ocr(self):
if self.image_path:
try:
image = PilImage.open(self.image_path)
text = pytesseract.image_to_string(image, lang='jpn')
self.result_text.setPlainText(text)
except Exception as e:
self.result_text.setPlainText(f"Error: {str(e)}")
else:
self.result_text.setPlainText("ファイルが選択されていません.")

if __name__ == "__main__":
app = QApplication(sys.argv)

# フォントをMS Gothicに設定
font = QFont("MS Gothic", 12)
app.setFont(font)

window = OCRApp()
window.setWindowTitle("OCR Reader")
window.setGeometry(100, 100, 500, 500)
window.show()

sys.exit(app.exec_())

結果は上々、後はディープラーニングでチューニングできるように改造するだけ。