From aec9fc783084d8742584e8b9b2223982c33108e0 Mon Sep 17 00:00:00 2001 From: 27942 Date: Mon, 2 Mar 2026 10:55:39 +0800 Subject: [PATCH] haha --- bb_trade.py | 7 + bb_trade_log_20260228.txt | 104 +++++++++++ bb_trade_log_20260301.txt | 368 ++++++++++++++++++++++++++++++++++++++ bb_trade_log_20260302.txt | 160 +++++++++++++++++ captcha_clip.py | 113 ++++++++++++ captcha_vl.py | 131 ++++++++++++++ credentials.json | 1 + find_captcha.py | 127 +++++++++++++ gmail_reader.py | 208 +++++++++++++++++++++ images/1.jpg | Bin 0 -> 37001 bytes images/2.png | Bin 0 -> 2928 bytes images/3.png | Bin 0 -> 3210 bytes images/4.png | Bin 0 -> 2433 bytes images/result_clip.jpg | Bin 0 -> 39826 bytes images/result_vl.jpg | Bin 0 -> 37477 bytes match_alpha.py | 65 +++++++ token.json | 1 + 17 files changed, 1285 insertions(+) create mode 100644 bb_trade_log_20260301.txt create mode 100644 bb_trade_log_20260302.txt create mode 100644 captcha_clip.py create mode 100644 captcha_vl.py create mode 100644 credentials.json create mode 100644 find_captcha.py create mode 100644 gmail_reader.py create mode 100644 images/1.jpg create mode 100644 images/2.png create mode 100644 images/3.png create mode 100644 images/4.png create mode 100644 images/result_clip.jpg create mode 100644 images/result_vl.jpg create mode 100644 match_alpha.py create mode 100644 token.json diff --git a/bb_trade.py b/bb_trade.py index 52cdfae..08c3610 100644 --- a/bb_trade.py +++ b/bb_trade.py @@ -339,6 +339,11 @@ class BBTrader: except Exception as e: logger.warning(f"写入日志失败: {e}") + def login(self): + self.page.ele('x://input[@placeholder="邮箱"]').input("ddrwode@gmail.com") + self.page.ele('x://input[@placeholder="密码"]').input("040828cjj") + self.page.ele('x://*[@id="__layout"]/div/div[2]/div/div[2]/div/div/div[2]/div[1]/div[2]/div/div[1]/div[2]/form/div[3]/div/button').click() + # ------------------------------------------------------------------ # 主循环(浏览器流程与四分之一代码一致) # ------------------------------------------------------------------ @@ -377,6 +382,8 @@ class BBTrader: logger.error("打开浏览器失败!") return + # self.login() + self.page.get(self.cfg.TRADE_URL) time.sleep(2) # 点击市价模式 diff --git a/bb_trade_log_20260228.txt b/bb_trade_log_20260228.txt index 806a1ba..079dd20 100644 --- a/bb_trade_log_20260228.txt +++ b/bb_trade_log_20260228.txt @@ -126,3 +126,107 @@ BB上轨: 1925.70 | 中轨: 1923.42 | 下轨: 1921.14 BB上轨: 1926.62 | 中轨: 1923.20 | 下轨: 1919.79 原因: 价格最低1919.32触及下轨1919.79,BB(10,2.5) ============================================================ + +============================================================ +时间: 2026-02-28 13:28:35 +操作: 加仓多#1 +价格: 1923.17 +BB上轨: 1927.09 | 中轨: 1925.14 | 下轨: 1923.20 +原因: 价格最低1923.17触及下轨1923.20,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-02-28 13:30:10 +操作: 加仓多#2 +价格: 1921.55 +BB上轨: 1927.86 | 中轨: 1924.83 | 下轨: 1921.80 +原因: 价格最低1921.55触及下轨1921.80,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-02-28 13:35:11 +操作: 加仓多#3 +价格: 1917.77 +BB上轨: 1930.09 | 中轨: 1923.98 | 下轨: 1917.87 +原因: 价格最低1917.50触及下轨1917.87,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-02-28 18:22:52 +操作: 开空 +价格: 1858.77 +BB上轨: 1858.59 | 中轨: 1852.48 | 下轨: 1846.38 +原因: 价格最高1858.77触及上轨1858.59,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-02-28 18:31:47 +操作: 加仓空#1 +价格: 1860.51 +BB上轨: 1860.09 | 中轨: 1852.96 | 下轨: 1845.83 +原因: 价格最高1860.04触及上轨1860.09,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-02-28 19:01:57 +操作: 加仓空#2 +价格: 1870.00 +BB上轨: 1870.20 | 中轨: 1859.65 | 下轨: 1849.09 +原因: 价格最高1874.12触及上轨1870.20,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-02-28 19:28:41 +操作: 加仓空#3 +价格: 1877.07 +BB上轨: 1877.05 | 中轨: 1866.53 | 下轨: 1856.00 +原因: 价格最高1877.10触及上轨1877.05,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-02-28 19:57:38 +操作: 翻转: 平空→开多 +价格: 1862.42 +BB上轨: 1878.16 | 中轨: 1870.54 | 下轨: 1862.92 +原因: 价格最低1862.41触及下轨1862.92,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-02-28 20:53:41 +操作: 加仓多#1 +价格: 1861.17 +BB上轨: 1872.96 | 中轨: 1867.11 | 下轨: 1861.25 +原因: 价格最低1861.17触及下轨1861.25,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-02-28 21:19:58 +操作: 开空 +价格: 1870.39 +BB上轨: 1872.99 | 中轨: 1867.66 | 下轨: 1862.32 +原因: 价格最高1876.19触及上轨1872.99,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-02-28 21:46:18 +操作: 加仓空#1 +价格: 1873.28 +BB上轨: 1873.28 | 中轨: 1868.72 | 下轨: 1864.17 +原因: 价格最高1873.28触及上轨1873.28,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-02-28 21:50:07 +操作: 加仓空#2 +价格: 1890.51 +BB上轨: 1887.97 | 中轨: 1871.04 | 下轨: 1854.10 +原因: 价格最高1890.30触及上轨1887.97,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-02-28 21:59:21 +操作: 加仓空#3 +价格: 1902.91 +BB上轨: 1901.44 | 中轨: 1874.44 | 下轨: 1847.43 +原因: 价格最高1903.50触及上轨1901.44,BB(10,2.5) (加仓#3/3) +============================================================ diff --git a/bb_trade_log_20260301.txt b/bb_trade_log_20260301.txt new file mode 100644 index 0000000..342ab27 --- /dev/null +++ b/bb_trade_log_20260301.txt @@ -0,0 +1,368 @@ + +============================================================ +时间: 2026-03-01 03:34:26 +操作: 加仓空#1 +价格: 1945.80 +BB上轨: 1942.91 | 中轨: 1928.45 | 下轨: 1913.99 +原因: 价格最高1945.80触及上轨1942.91,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 03:35:28 +操作: 加仓空#2 +价格: 1946.06 +BB上轨: 1947.60 | 中轨: 1930.12 | 下轨: 1912.64 +原因: 价格最高1948.81触及上轨1947.60,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 04:20:55 +操作: 加仓空#3 +价格: 1956.54 +BB上轨: 1958.72 | 中轨: 1947.07 | 下轨: 1935.42 +原因: 价格最高1963.78触及上轨1958.72,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 06:37:04 +操作: 开空 +价格: 1981.98 +BB上轨: 1971.65 | 中轨: 1961.60 | 下轨: 1951.55 +原因: 价格最高1982.00触及上轨1971.65,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 08:04:15 +操作: 加仓空#1 +价格: 1968.36 +BB上轨: 1967.65 | 中轨: 1961.56 | 下轨: 1955.46 +原因: 价格最高1968.37触及上轨1967.65,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 09:11:15 +操作: 翻转: 平空→开多 +价格: 1948.38 +BB上轨: 1965.27 | 中轨: 1957.74 | 下轨: 1950.20 +原因: 价格最低1948.07触及下轨1950.20,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 09:15:44 +操作: 加仓多#1 +价格: 1946.42 +BB上轨: 1966.34 | 中轨: 1956.43 | 下轨: 1946.53 +原因: 价格最低1946.20触及下轨1946.53,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 09:37:21 +操作: 翻转: 平多→开空 +价格: 1966.51 +BB上轨: 1967.60 | 中轨: 1955.23 | 下轨: 1942.85 +原因: 价格最高1967.64触及上轨1967.60,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 09:47:41 +操作: 加仓空#1 +价格: 1974.91 +BB上轨: 1973.88 | 中轨: 1956.84 | 下轨: 1939.80 +原因: 价格最高1974.91触及上轨1973.88,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 09:50:10 +操作: 加仓空#2 +价格: 1990.01 +BB上轨: 1988.73 | 中轨: 1959.52 | 下轨: 1930.30 +原因: 价格最高1991.56触及上轨1988.73,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 09:59:41 +操作: 开空 +价格: 2009.09 +BB上轨: 2008.95 | 中轨: 1964.55 | 下轨: 1920.15 +原因: 价格最高2009.20触及上轨2008.95,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 10:02:15 +操作: 加仓空#1 +价格: 2023.05 +BB上轨: 2025.72 | 中轨: 1970.39 | 下轨: 1915.07 +原因: 价格最高2026.00触及上轨2025.72,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 11:22:14 +操作: 开多 +价格: 2028.59 +BB上轨: 2042.05 | 中轨: 2035.46 | 下轨: 2028.87 +原因: 价格最低2028.58触及下轨2028.87,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 11:54:08 +操作: 加仓多#1 +价格: 2023.39 +BB上轨: 2039.59 | 中轨: 2032.27 | 下轨: 2024.96 +原因: 价格最低2021.86触及下轨2024.96,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 11:55:14 +操作: 加仓多#2 +价格: 2020.39 +BB上轨: 2042.34 | 中轨: 2030.59 | 下轨: 2018.84 +原因: 价格最低2018.50触及下轨2018.84,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 12:15:00 +操作: 加仓多#3 +价格: 2012.23 +BB上轨: 2039.99 | 中轨: 2026.95 | 下轨: 2013.91 +原因: 价格最低2008.07触及下轨2013.91,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 13:20:34 +操作: 翻转: 平多→开空 +价格: 2017.26 +BB上轨: 2017.21 | 中轨: 2014.22 | 下轨: 2011.24 +原因: 价格最高2017.47触及上轨2017.21,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 13:25:07 +操作: 加仓空#1 +价格: 2021.89 +BB上轨: 2021.00 | 中轨: 2015.09 | 下轨: 2009.17 +原因: 价格最高2021.58触及上轨2021.00,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 13:55:06 +操作: 翻转: 平空→开多 +价格: 2009.30 +BB上轨: 2023.23 | 中轨: 2016.18 | 下轨: 2009.13 +原因: 价格最低2008.73触及下轨2009.13,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 14:04:49 +操作: 加仓多#1 +价格: 2005.00 +BB上轨: 2024.71 | 中轨: 2015.13 | 下轨: 2005.56 +原因: 价格最低2005.00触及下轨2005.56,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 14:05:27 +操作: 加仓多#2 +价格: 2001.68 +BB上轨: 2026.45 | 中轨: 2014.43 | 下轨: 2002.41 +原因: 价格最低2001.68触及下轨2002.41,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 14:10:46 +操作: 加仓多#3 +价格: 1993.93 +BB上轨: 2029.77 | 中轨: 2012.76 | 下轨: 1995.76 +原因: 价格最低1993.62触及下轨1995.76,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 15:12:06 +操作: 翻转: 平多→开空 +价格: 2003.74 +BB上轨: 2003.48 | 中轨: 1996.50 | 下轨: 1989.52 +原因: 价格最高2003.74触及上轨2003.48,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 15:22:02 +操作: 加仓空#1 +价格: 2004.51 +BB上轨: 2004.32 | 中轨: 1996.69 | 下轨: 1989.06 +原因: 价格最高2004.51触及上轨2004.32,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 15:39:37 +操作: 加仓空#2 +价格: 2006.49 +BB上轨: 2005.89 | 中轨: 1998.49 | 下轨: 1991.09 +原因: 价格最高2007.16触及上轨2005.89,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 15:40:18 +操作: 加仓空#3 +价格: 2005.95 +BB上轨: 2008.50 | 中轨: 1999.85 | 下轨: 1991.20 +原因: 价格最高2008.89触及上轨2008.50,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 16:47:20 +操作: 翻转: 平空→开多 +价格: 1997.54 +BB上轨: 2011.42 | 中轨: 2004.66 | 下轨: 1997.89 +原因: 价格最低1997.54触及下轨1997.89,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 16:50:39 +操作: 加仓多#1 +价格: 1994.11 +BB上轨: 2012.88 | 中轨: 2003.62 | 下轨: 1994.36 +原因: 价格最低1994.00触及下轨1994.36,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 16:55:10 +操作: 加仓多#2 +价格: 1984.53 +BB上轨: 2019.59 | 中轨: 2002.06 | 下轨: 1984.53 +原因: 价格最低1984.04触及下轨1984.53,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 17:02:18 +操作: 加仓多#3 +价格: 1977.78 +BB上轨: 2021.30 | 中轨: 2000.09 | 下轨: 1978.87 +原因: 价格最低1977.34触及下轨1978.87,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 18:26:31 +操作: 翻转: 平多→开空 +价格: 1981.80 +BB上轨: 1982.79 | 中轨: 1979.44 | 下轨: 1976.08 +原因: 价格最高1982.80触及上轨1982.79,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 18:30:23 +操作: 加仓空#1 +价格: 1985.00 +BB上轨: 1984.64 | 中轨: 1979.89 | 下轨: 1975.13 +原因: 价格最高1985.00触及上轨1984.64,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 18:35:09 +操作: 加仓空#2 +价格: 1986.68 +BB上轨: 1986.58 | 中轨: 1980.49 | 下轨: 1974.40 +原因: 价格最高1986.68触及上轨1986.58,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 19:16:32 +操作: 加仓空#3 +价格: 1987.27 +BB上轨: 1987.94 | 中轨: 1983.79 | 下轨: 1979.63 +原因: 价格最高1987.96触及上轨1987.94,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 20:28:43 +操作: 翻转: 平空→开多 +价格: 1979.84 +BB上轨: 1987.42 | 中轨: 1983.66 | 下轨: 1979.90 +原因: 价格最低1979.64触及下轨1979.90,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 20:34:05 +操作: 加仓多#1 +价格: 1978.24 +BB上轨: 1987.88 | 中轨: 1983.22 | 下轨: 1978.55 +原因: 价格最低1978.24触及下轨1978.55,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 21:20:40 +操作: 加仓多#2 +价格: 1973.00 +BB上轨: 1982.99 | 中轨: 1978.04 | 下轨: 1973.10 +原因: 价格最低1973.00触及下轨1973.10,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 21:51:21 +操作: 翻转: 平多→开空 +价格: 1981.17 +BB上轨: 1980.40 | 中轨: 1976.08 | 下轨: 1971.77 +原因: 价格最高1981.82触及上轨1980.40,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 21:55:09 +操作: 开空 +价格: 2019.50 +BB上轨: 2011.12 | 中轨: 1980.16 | 下轨: 1949.21 +原因: 价格最高2019.50触及上轨2011.12,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 22:42:31 +操作: 翻转: 平空→开多 +价格: 1998.46 +BB上轨: 2021.45 | 中轨: 2010.61 | 下轨: 1999.77 +原因: 价格最低1997.98触及下轨1999.77,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 22:45:18 +操作: 加仓多#1 +价格: 1995.73 +BB上轨: 2021.76 | 中轨: 2008.71 | 下轨: 1995.66 +原因: 价格最低1995.55触及下轨1995.66,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 23:17:24 +操作: 翻转: 平多→开空 +价格: 2011.33 +BB上轨: 2011.41 | 中轨: 2003.47 | 下轨: 1995.52 +原因: 价格最高2011.70触及上轨2011.41,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-01 23:20:33 +操作: 加仓空#1 +价格: 2013.00 +BB上轨: 2012.52 | 中轨: 2003.72 | 下轨: 1994.92 +原因: 价格最高2013.00触及上轨2012.52,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-01 23:28:46 +操作: 加仓空#2 +价格: 2012.26 +BB上轨: 2012.18 | 中轨: 2003.62 | 下轨: 1995.05 +原因: 价格最高2012.30触及上轨2012.18,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-01 23:34:42 +操作: 加仓空#3 +价格: 2012.90 +BB上轨: 2013.39 | 中轨: 2003.97 | 下轨: 1994.56 +原因: 价格最高2013.42触及上轨2013.39,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-01 23:57:04 +操作: 翻转: 平空→开多 +价格: 2000.60 +BB上轨: 2017.24 | 中轨: 2008.93 | 下轨: 2000.62 +原因: 价格最低2000.38触及下轨2000.62,BB(10,2.5) +============================================================ diff --git a/bb_trade_log_20260302.txt b/bb_trade_log_20260302.txt new file mode 100644 index 0000000..6947ebf --- /dev/null +++ b/bb_trade_log_20260302.txt @@ -0,0 +1,160 @@ + +============================================================ +时间: 2026-03-02 00:00:12 +操作: 加仓多#1 +价格: 1993.03 +BB上轨: 2022.56 | 中轨: 2007.82 | 下轨: 1993.08 +原因: 价格最低1992.31触及下轨1993.08,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 00:47:35 +操作: 加仓多#2 +价格: 1991.52 +BB上轨: 2009.23 | 中轨: 2000.42 | 下轨: 1991.62 +原因: 价格最低1991.22触及下轨1991.62,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-02 00:50:07 +操作: 加仓多#3 +价格: 1972.92 +BB上轨: 2020.78 | 中轨: 1998.46 | 下轨: 1976.14 +原因: 价格最低1972.33触及下轨1976.14,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-02 02:54:45 +操作: 翻转: 平空→开多 +价格: 1975.78 +BB上轨: 1987.69 | 中轨: 1981.61 | 下轨: 1975.53 +原因: 价格最低1974.35触及下轨1975.53,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 02:55:32 +操作: 加仓多#1 +价格: 1972.67 +BB上轨: 1988.35 | 中轨: 1980.89 | 下轨: 1973.42 +原因: 价格最低1972.66触及下轨1973.42,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 03:01:38 +操作: 加仓多#2 +价格: 1973.37 +BB上轨: 1985.83 | 中轨: 1979.58 | 下轨: 1973.32 +原因: 价格最低1972.87触及下轨1973.32,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-02 03:06:27 +操作: 加仓多#3 +价格: 1969.61 +BB上轨: 1986.78 | 中轨: 1978.35 | 下轨: 1969.93 +原因: 价格最低1968.00触及下轨1969.93,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-02 04:10:24 +操作: 开多 +价格: 1938.14 +BB上轨: 1968.16 | 中轨: 1954.01 | 下轨: 1939.86 +原因: 价格最低1932.00触及下轨1939.86,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 04:15:20 +操作: 加仓多#1 +价格: 1931.04 +BB上轨: 1971.27 | 中轨: 1951.22 | 下轨: 1931.16 +原因: 价格最低1931.04触及下轨1931.16,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 05:21:09 +操作: 翻转: 平多→开空 +价格: 1925.01 +BB上轨: 1925.19 | 中轨: 1914.61 | 下轨: 1904.03 +原因: 价格最高1926.00触及上轨1925.19,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 06:03:53 +操作: 加仓空#1 +价格: 1930.73 +BB上轨: 1930.55 | 中轨: 1925.10 | 下轨: 1919.65 +原因: 价格最高1930.73触及上轨1930.55,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 06:13:08 +操作: 加仓空#2 +价格: 1933.10 +BB上轨: 1930.98 | 中轨: 1926.37 | 下轨: 1921.75 +原因: 价格最高1933.10触及上轨1930.98,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-02 06:15:10 +操作: 开空 +价格: 1944.64 +BB上轨: 1942.77 | 中轨: 1928.24 | 下轨: 1913.72 +原因: 价格最高1945.94触及上轨1942.77,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 08:07:31 +操作: 加仓空#1 +价格: 1943.79 +BB上轨: 1945.86 | 中轨: 1937.82 | 下轨: 1929.77 +原因: 价格最高1945.97触及上轨1945.86,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 08:10:09 +操作: 加仓空#2 +价格: 1950.40 +BB上轨: 1948.66 | 中轨: 1938.79 | 下轨: 1928.92 +原因: 价格最高1950.40触及上轨1948.66,BB(10,2.5) (加仓#2/3) +============================================================ + +============================================================ +时间: 2026-03-02 08:32:48 +操作: 加仓空#3 +价格: 1950.23 +BB上轨: 1950.72 | 中轨: 1942.27 | 下轨: 1933.83 +原因: 价格最高1950.89触及上轨1950.72,BB(10,2.5) (加仓#3/3) +============================================================ + +============================================================ +时间: 2026-03-02 09:10:45 +操作: 开空 +价格: 1980.63 +BB上轨: 1979.30 | 中轨: 1956.47 | 下轨: 1933.64 +原因: 价格最高1982.52触及上轨1979.30,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 10:06:29 +操作: 翻转: 平空→开多 +价格: 1956.56 +BB上轨: 1977.03 | 中轨: 1966.90 | 下轨: 1956.77 +原因: 价格最低1956.32触及下轨1956.77,BB(10,2.5) +============================================================ + +============================================================ +时间: 2026-03-02 10:10:10 +操作: 加仓多#1 +价格: 1948.99 +BB上轨: 1978.42 | 中轨: 1964.20 | 下轨: 1949.99 +原因: 价格最低1948.98触及下轨1949.99,BB(10,2.5) (加仓#1/3) +============================================================ + +============================================================ +时间: 2026-03-02 10:19:45 +操作: 加仓多#2 +价格: 1941.70 +BB上轨: 1981.96 | 中轨: 1961.75 | 下轨: 1941.53 +原因: 价格最低1941.34触及下轨1941.53,BB(10,2.5) (加仓#2/3) +============================================================ diff --git a/captcha_clip.py b/captcha_clip.py new file mode 100644 index 0000000..19f6811 --- /dev/null +++ b/captcha_clip.py @@ -0,0 +1,113 @@ +""" +用 CLIP 做图块相似度匹配,在大图中找模板图标位置 +原理:把大图切成滑动窗口小块,用 CLIP 计算每块和模板的视觉相似度,取最高分的块 +""" +import cv2 +import numpy as np +from PIL import Image +import torch +from transformers import CLIPProcessor, CLIPModel +from pathlib import Path + +BASE = Path(__file__).parent / "images" +MODEL_NAME = "openai/clip-vit-base-patch32" # 约600MB,小模型 + + +def load_clip(): + print("加载 CLIP 模型(约600MB,首次自动下载)...") + model = CLIPModel.from_pretrained(MODEL_NAME).to("cuda") + processor = CLIPProcessor.from_pretrained(MODEL_NAME) + print("CLIP 加载完成") + return model, processor + + +def find_by_clip(model, processor, main_img: np.ndarray, template_img: np.ndarray, + step=10, win_sizes=None): + """ + 滑动窗口 + CLIP 相似度,找模板在大图中的最佳位置 + """ + if win_sizes is None: + th, tw = template_img.shape[:2] + # 尝试原始尺寸及上下浮动 + win_sizes = [(int(tw * s), int(th * s)) for s in [0.8, 0.9, 1.0, 1.1, 1.2]] + + # 预处理模板 + tmpl_pil = Image.fromarray(cv2.cvtColor(template_img, cv2.COLOR_BGR2RGB)) + tmpl_inputs = processor(images=tmpl_pil, return_tensors="pt").to("cuda") + with torch.no_grad(): + tmpl_out = model.vision_model(**tmpl_inputs) + tmpl_feat = model.visual_projection(tmpl_out.pooler_output).float() + tmpl_feat = tmpl_feat / tmpl_feat.norm(dim=-1, keepdim=True) + + mh, mw = main_img.shape[:2] + best_score = -1 + best_box = None + + for (ww, wh) in win_sizes: + if ww > mw or wh > mh: + continue + for y in range(0, mh - wh + 1, step): + for x in range(0, mw - ww + 1, step): + crop = main_img[y:y+wh, x:x+ww] + crop_pil = Image.fromarray(cv2.cvtColor(crop, cv2.COLOR_BGR2RGB)) + crop_inputs = processor(images=crop_pil, return_tensors="pt").to("cuda") + with torch.no_grad(): + crop_out = model.vision_model(**crop_inputs) + crop_feat = model.visual_projection(crop_out.pooler_output).float() + crop_feat = crop_feat / crop_feat.norm(dim=-1, keepdim=True) + score = (tmpl_feat * crop_feat).sum().item() + if score > best_score: + best_score = score + best_box = (x, y, ww, wh) + + return best_box, best_score + + +def main(): + main_img = cv2.imread(str(BASE / "1.jpg")) + templates = { + "2.png": cv2.imread(str(BASE / "2.png")), + "3.png": cv2.imread(str(BASE / "3.png")), + "4.png": cv2.imread(str(BASE / "4.png")), + } + + # 模板是 BGRA,转 BGR + for name in templates: + img = cv2.imread(str(BASE / name), cv2.IMREAD_UNCHANGED) + if img.shape[2] == 4: + # alpha 通道合成白底 + alpha = img[:, :, 3:4] / 255.0 + rgb = img[:, :, :3].astype(float) + white = np.ones_like(rgb) * 255 + merged = (rgb * alpha + white * (1 - alpha)).astype(np.uint8) + templates[name] = merged + else: + templates[name] = img + + model, processor = load_clip() + + vis = main_img.copy() + colors = {"2.png": (0, 0, 255), "3.png": (0, 255, 0), "4.png": (255, 0, 0)} + + print() + for name, tmpl in templates.items(): + print(f"正在匹配 {name} ...") + box, score = find_by_clip(model, processor, main_img, tmpl, step=8) + if box: + x, y, w, h = box + cx, cy = x + w // 2, y + h // 2 + color = colors[name] + cv2.rectangle(vis, (x, y), (x+w, y+h), color, 2) + cv2.circle(vis, (cx, cy), 5, color, -1) + cv2.putText(vis, name, (x, y-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1) + print(f" {name}: 中心点 ({cx}, {cy}) 相似度={score:.4f}") + else: + print(f" {name}: 未找到") + + out = BASE / "result_clip.jpg" + cv2.imwrite(str(out), vis) + print(f"\n结果保存到: {out}") + + +if __name__ == "__main__": + main() diff --git a/captcha_vl.py b/captcha_vl.py new file mode 100644 index 0000000..d60605d --- /dev/null +++ b/captcha_vl.py @@ -0,0 +1,131 @@ +""" +用 Qwen2-VL 本地模型识别验证码图片位置 +首次运行会自动下载模型(约 4GB) +""" +import base64 +from pathlib import Path +from transformers import Qwen2VLForConditionalGeneration, AutoProcessor +from qwen_vl_utils import process_vision_info +import torch + +MODEL_NAME = "Qwen/Qwen2-VL-7B-Instruct" +BASE = Path(__file__).parent / "images" + +def img_to_base64(path): + with open(path, "rb") as f: + return base64.b64encode(f.read()).decode() + +def load_model(): + print("加载模型中(首次运行会下载约15GB)...") + from transformers import BitsAndBytesConfig + bnb_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=torch.float16, + bnb_4bit_use_double_quant=True, + bnb_4bit_quant_type="nf4", + ) + model = Qwen2VLForConditionalGeneration.from_pretrained( + MODEL_NAME, + quantization_config=bnb_config, + device_map="cuda", + ) + processor = AutoProcessor.from_pretrained(MODEL_NAME) + print("模型加载完成") + return model, processor + +def ask_one(model, processor, main_img_path, template_path): + """让模型找出单个模板图在主图中的位置,返回原始回答""" + messages = [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": ( + "下面是一张背景大图(300x200像素)," + "以及一个需要在大图中找到的小图标轮廓。\n" + "大图:" + ) + }, + {"type": "image", "image": str(main_img_path)}, + { + "type": "text", + "text": "\n小图标轮廓(这个图标出现在大图中某个物体上):" + }, + {"type": "image", "image": str(template_path)}, + { + "type": "text", + "text": ( + "\n请仔细观察小图标的形状,在大图中找到形状最相似的物体," + "给出该物体中心点的像素坐标。" + "坐标原点在左上角,x向右,y向下。" + "只需回答坐标,格式:(x, y)" + ) + } + ] + } + ] + + text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + image_inputs, video_inputs = process_vision_info(messages) + inputs = processor( + text=[text], + images=image_inputs, + videos=video_inputs, + padding=True, + return_tensors="pt", + ).to("cuda") + + with torch.no_grad(): + generated_ids = model.generate(**inputs, max_new_tokens=50) + + generated_ids_trimmed = [ + out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) + ] + output = processor.batch_decode( + generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False + ) + return output[0].strip() + + +def main(): + main_img = BASE / "1.jpg" + templates = [BASE / "2.png", BASE / "3.png", BASE / "4.png"] + + model, processor = load_model() + + import re + import cv2 + + img = cv2.imread(str(main_img)) + colors = {"2.png": (0, 0, 255), "3.png": (0, 255, 0), "4.png": (255, 0, 0)} + results = {} + + for tmpl_path in templates: + name = tmpl_path.name + print(f"\n正在识别 {name} ...") + answer = ask_one(model, processor, main_img, tmpl_path) + print(f"{name} 模型回答: {answer}") + + match = re.search(r"\((\d+)[,,\s]+(\d+)\)", answer) + if match: + x, y = int(match.group(1)), int(match.group(2)) + results[name] = (x, y) + color = colors[name] + cv2.circle(img, (x, y), 8, color, -1) + cv2.circle(img, (x, y), 12, color, 2) + cv2.putText(img, name, (x + 14, y + 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1) + else: + print(f"{name}: 未能解析坐标,原始回答: {answer}") + + print("\n=== 点击坐标汇总 ===") + for name, (x, y) in results.items(): + print(f"{name}: ({x}, {y})") + + out = BASE / "result_vl.jpg" + cv2.imwrite(str(out), img) + print(f"\n可视化结果保存到: {out}") + + +if __name__ == "__main__": + main() diff --git a/credentials.json b/credentials.json new file mode 100644 index 0000000..08d7b9d --- /dev/null +++ b/credentials.json @@ -0,0 +1 @@ +{"installed":{"client_id":"823839778551-mgovppr13aoil1r69upj7uiv84ej0sih.apps.googleusercontent.com","project_id":"gen-lang-client-0535910705","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["http://localhost"]}} \ No newline at end of file diff --git a/find_captcha.py b/find_captcha.py new file mode 100644 index 0000000..59a053e --- /dev/null +++ b/find_captcha.py @@ -0,0 +1,127 @@ +""" +验证码图片匹配脚本 +在 1.jpg 中找到 2.png、3.png、4.png 的位置 +""" +import cv2 +import numpy as np +import os + +def find_template_in_image(main_img_path, template_path, threshold=0.5): + """ + 在主图中查找模板图片的位置(原始尺寸 + 多尺度) + 支持 PNG alpha 通道作为模板轮廓 + 返回置信度最高的匹配结果 + """ + main_img = cv2.imread(main_img_path) + template = cv2.imread(template_path, cv2.IMREAD_UNCHANGED) + + if main_img is None: + print(f"无法读取主图: {main_img_path}") + return [] + if template is None: + print(f"无法读取模板: {template_path}") + return [] + + h, w = template.shape[:2] + main_gray = cv2.cvtColor(main_img, cv2.COLOR_BGR2GRAY) + + # 如果模板有 alpha 通道且 RGB 全黑,用 alpha 通道作为灰度图 + if template.shape[2] == 4: + alpha = template[:, :, 3] + rgb_sum = template[:, :, :3].sum() + if rgb_sum == 0: + tmpl_gray = alpha # 用 alpha 通道 + else: + tmpl_gray = cv2.cvtColor(template[:, :, :3], cv2.COLOR_BGR2GRAY) + else: + tmpl_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) + + best = None + + # 先尝试原始尺寸 + scales = [1.0] + list(np.linspace(0.6, 1.4, 17)) + for scale in scales: + rw, rh = int(w * scale), int(h * scale) + if rh < 5 or rw < 5: + continue + if rh > main_gray.shape[0] or rw > main_gray.shape[1]: + continue + + resized_tmpl = cv2.resize(tmpl_gray, (rw, rh)) + res = cv2.matchTemplate(main_gray, resized_tmpl, cv2.TM_CCOEFF_NORMED) + _, max_val, _, max_loc = cv2.minMaxLoc(res) + + if best is None or max_val > best["confidence"]: + best = { + "x": max_loc[0], + "y": max_loc[1], + "w": rw, + "h": rh, + "confidence": max_val, + "scale": scale, + "center_x": max_loc[0] + rw // 2, + "center_y": max_loc[1] + rh // 2, + } + + if best is None or best["confidence"] < threshold: + return [] + return [best] + + +def main(): + base_dir = os.path.join(os.path.dirname(__file__), "images") + main_img_path = os.path.join(base_dir, "1.jpg") + templates = ["2.png", "3.png", "4.png"] + + print(f"主图: {main_img_path}\n") + + all_results = {} + for tmpl_name in templates: + tmpl_path = os.path.join(base_dir, tmpl_name) + matches = find_template_in_image(main_img_path, tmpl_path, threshold=0.5) + all_results[tmpl_name] = matches + + if matches: + m = matches[0] + print(f"[{tmpl_name}] 找到匹配:") + print(f" 位置: ({m['x']}, {m['y']})") + print(f" 中心点: ({m['center_x']}, {m['center_y']})") + print(f" 尺寸: {m['w']}x{m['h']}") + print(f" 置信度: {m['confidence']:.4f}") + print(f" 缩放比例: {m['scale']:.2f}") + else: + print(f"[{tmpl_name}] 未找到匹配(置信度不足)") + print() + + # 可视化结果,保存标注图 + main_img = cv2.imread(main_img_path) + colors = [(0, 0, 255), (0, 255, 0), (255, 0, 0)] # 红、绿、蓝 + for i, tmpl_name in enumerate(templates): + matches = all_results.get(tmpl_name, []) + for m in matches: + x, y, w, h = m["x"], m["y"], m["w"], m["h"] + color = colors[i % len(colors)] + cv2.rectangle(main_img, (x, y), (x + w, y + h), color, 2) + cv2.putText(main_img, tmpl_name, (x, y - 5), + cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2) + # 画中心点 + cx, cy = m["center_x"], m["center_y"] + cv2.circle(main_img, (cx, cy), 5, color, -1) + + output_path = os.path.join(base_dir, "result.jpg") + cv2.imwrite(output_path, main_img) + print(f"标注结果已保存到: {output_path}") + + # 打印点击坐标汇总(用于自动化点击) + print("\n=== 点击坐标汇总 ===") + for tmpl_name in templates: + matches = all_results.get(tmpl_name, []) + if matches: + m = matches[0] + print(f"{tmpl_name}: 点击 ({m['center_x']}, {m['center_y']})") + else: + print(f"{tmpl_name}: 未找到") + + +if __name__ == "__main__": + main() diff --git a/gmail_reader.py b/gmail_reader.py new file mode 100644 index 0000000..e4eff0c --- /dev/null +++ b/gmail_reader.py @@ -0,0 +1,208 @@ +""" +Gmail API 邮件读取工具 +使用前准备: +1. 访问 https://console.cloud.google.com/ 创建项目 +2. 启用 Gmail API +3. 创建 OAuth 2.0 凭据(桌面应用类型),下载 credentials.json 放到本目录 +4. 首次运行会弹出浏览器授权,授权后自动生成 token.json +""" + +import os +import base64 +import json +from datetime import datetime +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build +from email.utils import parsedate_to_datetime + +# 只读权限 +SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] + +# 凭据文件路径(和脚本同目录) +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +CREDENTIALS_FILE = os.path.join(BASE_DIR, 'credentials.json') +TOKEN_FILE = os.path.join(BASE_DIR, 'token.json') + + +def get_service(): + """获取 Gmail API 服务实例""" + creds = None + + # 尝试加载已有 token + if os.path.exists(TOKEN_FILE): + creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES) + + # token 无效或过期,重新授权 + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + if not os.path.exists(CREDENTIALS_FILE): + print(f"❌ 找不到 {CREDENTIALS_FILE}") + print("请从 Google Cloud Console 下载 OAuth 凭据文件,命名为 credentials.json 放到本目录") + return None + flow = InstalledAppFlow.from_client_secrets_file(CREDENTIALS_FILE, SCOPES) + creds = flow.run_local_server(port=0) + + # 保存 token 供下次使用 + with open(TOKEN_FILE, 'w') as f: + f.write(creds.to_json()) + + return build('gmail', 'v1', credentials=creds) + + +def decode_body(payload): + """递归解析邮件正文(优先纯文本)""" + # 直接有 body data + if 'body' in payload and payload['body'].get('data'): + return base64.urlsafe_b64decode(payload['body']['data']).decode('utf-8', errors='ignore') + + # 多部分邮件,递归查找 + if 'parts' in payload: + # 优先找 text/plain + for part in payload['parts']: + if part.get('mimeType') == 'text/plain': + data = part['body'].get('data', '') + if data: + return base64.urlsafe_b64decode(data).decode('utf-8', errors='ignore') + + # 没有纯文本,找 text/html + for part in payload['parts']: + if part.get('mimeType') == 'text/html': + data = part['body'].get('data', '') + if data: + return base64.urlsafe_b64decode(data).decode('utf-8', errors='ignore') + + # 递归子部分 + for part in payload['parts']: + result = decode_body(part) + if result: + return result + + return None + + +def get_header(headers, name): + """从 headers 列表中取指定字段""" + for h in headers: + if h['name'].lower() == name.lower(): + return h['value'] + return '' + + +def list_emails(service, query='', label_ids=None, max_results=10): + """ + 列出邮件 + :param query: Gmail 搜索语法,如 'from:xxx@gmail.com' 'subject:报告' 'is:unread' + :param label_ids: 标签过滤,如 ['INBOX'], ['UNREAD'] + :param max_results: 最多返回条数 + """ + params = {'userId': 'me', 'maxResults': max_results} + if query: + params['q'] = query + if label_ids: + params['labelIds'] = label_ids + + results = service.users().messages().list(**params).execute() + return results.get('messages', []) + + +def read_email(service, msg_id): + """读取单封邮件详情""" + msg = service.users().messages().get(userId='me', id=msg_id, format='full').execute() + headers = msg['payload']['headers'] + + subject = get_header(headers, 'Subject') or '(无主题)' + sender = get_header(headers, 'From') + to = get_header(headers, 'To') + date_str = get_header(headers, 'Date') + body = decode_body(msg['payload']) or '(无正文)' + + # 解析日期 + try: + date = parsedate_to_datetime(date_str) + date_str = date.strftime('%Y-%m-%d %H:%M:%S') + except Exception: + pass + + return { + 'id': msg_id, + 'subject': subject, + 'from': sender, + 'to': to, + 'date': date_str, + 'body': body, + 'labels': msg.get('labelIds', []), + 'snippet': msg.get('snippet', ''), + } + + +def get_attachments(service, msg_id, save_dir=None): + """下载邮件附件""" + msg = service.users().messages().get(userId='me', id=msg_id, format='full').execute() + attachments = [] + + if save_dir is None: + save_dir = os.path.join(BASE_DIR, 'attachments') + + def _find_attachments(payload): + if 'parts' in payload: + for part in payload['parts']: + filename = part.get('filename', '') + if filename and part['body'].get('attachmentId'): + att = service.users().messages().attachments().get( + userId='me', messageId=msg_id, id=part['body']['attachmentId'] + ).execute() + data = base64.urlsafe_b64decode(att['data']) + + os.makedirs(save_dir, exist_ok=True) + filepath = os.path.join(save_dir, filename) + with open(filepath, 'wb') as f: + f.write(data) + + attachments.append({'filename': filename, 'path': filepath, 'size': len(data)}) + print(f" 📎 已保存附件: {filename} ({len(data)} bytes)") + + # 递归 + _find_attachments(part) + + _find_attachments(msg['payload']) + return attachments + + +# ============ 使用示例 ============ + +if __name__ == '__main__': + service = get_service() + if not service: + exit(1) + + print("=" * 60) + print("📬 Gmail 邮件读取") + print("=" * 60) + + # --- 示例1: 读取收件箱最近 5 封邮件 --- + print("\n📥 收件箱最近 5 封邮件:\n") + messages = list_emails(service, label_ids=['INBOX'], max_results=5) + + for m in messages: + email_data = read_email(service, m['id']) + print(f"📧 主题: {email_data['subject']}") + print(f" 发件人: {email_data['from']}") + print(f" 日期: {email_data['date']}") + print(f" 摘要: {email_data['snippet'][:80]}...") + print() + + # --- 示例2: 搜索特定邮件(取消注释使用)--- + # messages = list_emails(service, query='subject:报告 is:unread', max_results=5) + + # --- 示例3: 读取完整正文 --- + # if messages: + # email_data = read_email(service, messages[0]['id']) + # print(f"\n完整正文:\n{email_data['body']}") + + # --- 示例4: 下载附件 --- + # if messages: + # get_attachments(service, messages[0]['id']) diff --git a/images/1.jpg b/images/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b61bdcf0c2cd5184f23e445a0d703067692aafc6 GIT binary patch literal 37001 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 OqybA9#q@3(NAh1;Df1Zs literal 0 HcmV?d00001 diff --git a/images/3.png b/images/3.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d079d596fc92c7aff124b84c43c03dd26ecb98 GIT binary patch literal 3210 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 literal 0 HcmV?d00001 diff --git a/images/4.png b/images/4.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c98239c7ddfc5a06557d7e65c1c7c105b1c71d GIT binary patch literal 2433 zcmV-{34Zp8P)ZtMcuP8OtA9;)zl97Yqe@jUKC58Q(D zu@5^j1TSMgp2R_&C`g@wSb)oL0E-cDJ-T8odf{CBFK)qJlwlZNK{cMldpb#w8UwHp zm*6l;@gUOiZ@3BFk%qTXjHi)AA!g&BupJe667TB-!6!EmH5h?3OuP7D;; zgv-$&l8%co55uqv)9_0)OR?aS$wLh;MGQCLKD3Hlh=nK=2}qz8qtGN0!%$SC5bxk$ zu@VU>6ns1Z{ZWOh(2QI0L$o4>LAVDO;VqQmOBjpKU>UxR1KNy04bH7@RFbMyFBJ4y39!0>Nn1BrY9Fy@DPR3}IBUj`BOq4>wN0WvDn1O51 zfQ7gpe-OCZtX z48h$f#17QpAv8Kt2Ik;eoQ%yl1^uxB|A4cw6l0`NaP0Ch8{fiSEWrbK8v$QIC5rF{ zs__WkcXU}O!8BwbiS?L+QVhcnFi8pp$EH8-z}L}$MffrHA>gZ+jW1&l%J3K(wJ#kL zaW^uM#0pg4E)<~xI?5c^P!r_roq6L1H5;SF4YtwWKo#!AK?DrK zB77M;QGrL%qrljFJUY;i*&;{l;aev!gOpyQi=s_&cN-Mh&0@fa_kYg0E@eP!qKk9H3;z*(!zJuAw!b;4>W+ZijAQCVP|AicpI#i$*gRl^Vcnvl9 zPc&*@Hm<@9q~f!nG(vCTdZIdL(s{Ad-%&@HqCO1!v&*cnDXc5U-;ekDyWe zGB6sqArEUX4{Ona3|x;AWMKuW5l2!d3L+)BdL=GkxUe00hXc^V{sF5L>|UFm6ftPU`mLZ{&1(8#5D`w$gEJraeL>G}An1RQ&Zvy7xOvEuAFQ5fkn2sB8I@X{c zdLfPq)FPo11(EKkz$CncCY*}~EWkAM#&*oYUGO#3;4IXm7;z+|SP+R}7#_gccmXr97Of&N6yZMPVKaV%;pm5#a5Y{M z>4xzrM-K$-#`SmxE!uR&7*yaaY{DeeAt8l=HW~OAlp`0v#_iaER*^2a7z=PNVn`s4 z8xcnm-7pU2$ifz6qd)eb7;8i_(H)=1jkp*An{XpGAt^fl8ndw;36UO{ zj(#eIBVZ)TF$6J@B$}`rTd+}NB63lO68s7Y zpHOgg*%*bH$i;6^hTbSaF4o{VT!DOS!Lt~LY%Iq-)FUYp!*Eog010fvgV>5K_#ebD z8uQQ>8!;EPNcaST_GRHJRH85b8`(G;>oEr};&POtADWSlWhljFBpoSWDDK8!yn!k_ zj6>RV#g+IzdLoWWEJwn}6m%>DS6~TF6KTON>_$4Wk&A4R<(Pt3k#uwcL$DYZU>oM+ zQ8a6lfti?vR>V<(S|of7!H4UL5%?*(A&Ddcf+IbF$#@G%9g86!i;<7*xEC*=7tY5B z^g~aPR@9*stC92(1;-|aFJKya<6XRi1~i}nTd@_5j$I4|Sc1W5!C?fXAzkEcY(N2e zqaIVS4oM$D@c%DhC>CNcVo2g0tjAJ3g%*4bH8>0PC`KF!$0#^H1dPC3-p+K8M*o_yl5pncE8Tw))=Asq}M-d#q0*2yl*_AgE;141rq*DaQurQAB&NX?U;k5Xx8Q*F$bg3 ziaL~HHIn`$I5EUffF&4=op=npa1M$v2wl)cB!PNN#X2N?AUJUZ48=kWMogQ-IE;gM z20L&K`r=tk!plAooLB-zpaS_w$3d*X^Y|rRM^}tN1^VI!JcOp;#1q3vl%fE8a06DM zMVlU|!35lg8Q343m}0mLvrvG&n2e{%ju zi^+HhO~HvRhT*6}K6c?*#BdQlhvk@#ZAb`#KfEhi%rNi^aRlKxEacjo^9|FD)@er}dp00000NkvXXu0mjfX+Ida literal 0 HcmV?d00001 diff --git a/images/result_clip.jpg b/images/result_clip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88aef20857ff25ff73d550a4b5fcf1facdd87214 GIT binary patch literal 39826 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 literal 0 HcmV?d00001 diff --git a/images/result_vl.jpg b/images/result_vl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b9b0a986a5a742c835c528f86041fa2501cd401 GIT binary patch literal 37477 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 literal 0 HcmV?d00001 diff --git a/match_alpha.py b/match_alpha.py new file mode 100644 index 0000000..017f9f2 --- /dev/null +++ b/match_alpha.py @@ -0,0 +1,65 @@ +import cv2 +import numpy as np + +base = 'c:/Users/27942/Desktop/codes/codex_jxs_code/images/' +main_img = cv2.imread(base + '1.jpg') +main_gray = cv2.cvtColor(main_img, cv2.COLOR_BGR2GRAY) + +def match_template_alpha(main_gray, alpha, name): + h, w = alpha.shape[:2] + best = None + + # 策略1: 直接用alpha通道匹配灰度图 + # 策略2: 用alpha做mask,只比较非透明区域 + # 策略3: 对alpha二值化后匹配 + + _, alpha_bin = cv2.threshold(alpha, 10, 255, cv2.THRESH_BINARY) + + scales = [1.0] + list(np.linspace(0.65, 1.35, 29)) + for scale in scales: + rw, rh = int(w * scale), int(h * scale) + if rh < 10 or rw < 10: + continue + if rh > main_gray.shape[0] or rw > main_gray.shape[1]: + continue + + resized_alpha = cv2.resize(alpha, (rw, rh)) + resized_bin = cv2.resize(alpha_bin, (rw, rh)) + _, resized_mask = cv2.threshold(resized_bin, 10, 255, cv2.THRESH_BINARY) + + # 用mask匹配(只看非透明区域) + res = cv2.matchTemplate(main_gray, resized_alpha, cv2.TM_CCOEFF_NORMED, mask=resized_mask) + _, max_val, _, max_loc = cv2.minMaxLoc(res) + + if best is None or max_val > best['conf']: + best = { + 'x': max_loc[0], 'y': max_loc[1], + 'w': rw, 'h': rh, + 'conf': max_val, 'scale': scale, + 'cx': max_loc[0] + rw // 2, + 'cy': max_loc[1] + rh // 2, + } + + return best + +results = {} +for name in ['2.png', '3.png', '4.png']: + template = cv2.imread(base + name, cv2.IMREAD_UNCHANGED) + alpha = template[:, :, 3] + best = match_template_alpha(main_gray, alpha, name) + results[name] = best + x, y, cx, cy = best['x'], best['y'], best['cx'], best['cy'] + conf, scale = best['conf'], best['scale'] + print(name + ': pos=(' + str(x) + ',' + str(y) + ') center=(' + str(cx) + ',' + str(cy) + ') conf=' + str(round(conf, 4)) + ' scale=' + str(round(scale, 2))) + +# 可视化 +colors = [(0, 0, 255), (0, 255, 0), (255, 0, 0)] +vis = main_img.copy() +for i, name in enumerate(['2.png', '3.png', '4.png']): + m = results[name] + cv2.rectangle(vis, (m['x'], m['y']), (m['x'] + m['w'], m['y'] + m['h']), colors[i], 2) + cv2.putText(vis, name, (m['x'], m['y'] - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, colors[i], 1) + cv2.circle(vis, (m['cx'], m['cy']), 5, colors[i], -1) + +cv2.imwrite(base + 'result.jpg', vis) +print('result saved to images/result.jpg') diff --git a/token.json b/token.json new file mode 100644 index 0000000..385a66d --- /dev/null +++ b/token.json @@ -0,0 +1 @@ +{"token": "ya29.a0ATkoCc7EYaXMumpShCwmfiq5pqSbgMB_XkUuWWUFnYRs8fvfPt6xYaU3r8rrdiFWHpQ_07R2FN_ML4X-4Q9eoHp5Dj6R0xgL1A9xFONvaJhlEP_ndce3Uht6LpeIUhfoGw2fHU9ZlvKcVNyCfcGsTqsR8YXWoe49MmU3k-DiHQgIDrxZ0c7Kyfb0FltZ9bUwXJg8ILIaCgYKAYUSARMSFQHGX2MiD7gOuz1kuvvNQABqx39YNw0206", "refresh_token": "1//0gVVN8c-x-T1MCgYIARAAGBASNwF-L9IrNPuDnHu-3vZoJvPChjsyjrUwtlSX7qmY_xnwFUr0FPf-t7Tm53f3vSo4OZOaJWSqA0s", "token_uri": "https://oauth2.googleapis.com/token", "client_id": "823839778551-mgovppr13aoil1r69upj7uiv84ej0sih.apps.googleusercontent.com", "client_secret": "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", "scopes": ["https://www.googleapis.com/auth/gmail.readonly"], "universe_domain": "googleapis.com", "account": "", "expiry": "2026-02-28T19:35:00Z"} \ No newline at end of file