
@hakancelik
25Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96
hive.blog/@hakancelikVOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
2.468USD
HIVE
0.040HIVE
HBD
0.000HBD
Own HP
6.130HP
Detailed Balance
| HIVE | ||
| balance | 0.040HIVE | HIVE |
| market_balance | 0.000HIVE | HIVE |
| savings_balance | 0.000HIVE | HIVE |
| reward_hive_balance | 0.000HIVE | HIVE |
| HIVE POWER | ||
| Own HP | 6.130HP | HP |
| Delegated Out | 0.000HP | HP |
| Delegation In | 0.000HP | HP |
| Effective Power | 6.130HP | HP |
| Reward HP (pending) | 0.000HP | HP |
| HBD | ||
| hbd_balance | 0.000HBD | HBD |
| hbd_conversions | 0.000HBD | HBD |
| hbd_market_balance | 0.000HBD | HBD |
| savings_hbd_balance | 0.000HBD | HBD |
| reward_hbd_balance | 0.000HBD | HBD |
{
"balance": "0.040 HIVE",
"savings_balance": "0.000 HIVE",
"reward_hive_balance": "0.000 HIVE",
"vesting_shares": "9951.076677 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"hbd_balance": "0.000 HBD",
"savings_hbd_balance": "0.000 HBD",
"reward_hbd_balance": "0.000 HBD"
}Account Info
| name | hakancelik |
| id | 644120 |
| rank | 0 |
| reputation | 0 |
| created | 2018-01-23T16:28:21 |
| recovery_account | steem |
| proxy | None |
| invited_by | null |
| post_count | 565 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2019-05-22T08:53:21 |
| last_root_post | 2019-05-22T08:53:21 |
| last_vote_time | 2019-07-30T16:34:12 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 10,000 |
| delayed_votes | None |
| governance_vote_expiration_ts | 1969-12-31T23:59:59 |
| balance | 0.040 HIVE |
| savings_balance | 0.000 HIVE |
| hbd_balance | 0.000 HBD |
| savings_hbd_balance | 0.000 HBD |
| vesting_shares | 9951.076677 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 HIVE |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 2018-01-27T12:22:06 |
| last_account_update | 2020-02-20T11:46:48 |
| mined | No |
| hbd_seconds | 0 |
| hbd_last_interest_payment | 2019-09-26T15:14:45 |
| savings_hbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 644120,
"name": "hakancelik",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5ZhZGNu1gnuQr4gVrt8CmomxaeG7VdSeDN6YzNgf5j6kDDYc4j",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM4yBU8UetiGzzmGNReFUJofki6zBmjoaY79zKrhprPoAGBSoN6k",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"busy.app",
1
],
[
"coogger.app",
1
],
[
"steemauto",
1
],
[
"steemgigs.app",
1
],
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM6WqeJkXJGtMBR1Lc5zt1PyvkmoSpqESCxPE7VzynEdAacAnzuw",
1
]
]
},
"memo_key": "STM8kD92xTrZyuhbJnMX4HM5X1Jdzn8naNV9M6Yy7SZs94rbJYm3a",
"json_metadata": "{\"profile\":{\"name\":\"Hakan ÇELİK\",\"about\":\"Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96\",\"website\":\"https://www.coogger.com/@hakancelik96/\",\"location\":\"world\",\"cover_image\":\"http://www.coogger.com/static/logos/png/800.png\",\"profile_image\":\"https://resmim.net/f/lQLHFk.jpg\"}}",
"posting_json_metadata": "{\"profile\":{\"name\":\"Hakan ÇELİK\",\"website\":\"https://www.coogger.com/@hakancelik96/\",\"location\":\"world\",\"profile_image\":\"https://resmim.net/f/lQLHFk.jpg\",\"version\":2}}",
"proxy": "",
"previous_owner_update": "1970-01-01T00:00:00",
"last_owner_update": "2018-01-27T12:22:06",
"last_account_update": "2020-02-20T11:46:48",
"created": "2018-01-23T16:28:21",
"mined": false,
"recovery_account": "steem",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 565,
"can_vote": true,
"voting_manabar": {
"current_mana": 115723117977,
"last_update_time": 1564504452
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1516724898
},
"voting_power": 10000,
"balance": "0.040 HIVE",
"savings_balance": "0.000 HIVE",
"hbd_balance": "0.000 HBD",
"hbd_seconds": "0",
"hbd_seconds_last_update": "2019-09-26T15:14:45",
"hbd_last_interest_payment": "2019-09-26T15:14:45",
"savings_hbd_balance": "0.000 HBD",
"savings_hbd_seconds": "0",
"savings_hbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_hbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_hbd_balance": "0.000 HBD",
"reward_hive_balance": "0.000 HIVE",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_hive": "0.000 HIVE",
"vesting_shares": "9951.076677 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"post_voting_power": "9951.076677 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"pending_transfers": 0,
"curation_rewards": 127786,
"posting_rewards": 1096283,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2019-05-22T08:53:21",
"last_root_post": "2019-05-22T08:53:21",
"last_vote_time": "2019-07-30T16:34:12",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"governance_vote_expiration_ts": "1969-12-31T23:59:59",
"delayed_votes": [],
"open_recurrent_transfers": 0,
"vesting_balance": "0.000 HIVE",
"reputation": 0,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 0
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
hakancelikaccount expired: @hakancelik2022/08/13 11:14:24
hakancelikaccount expired: @hakancelik
2022/08/13 11:14:24
| account | hakancelik |
| Transaction Info | Block #66980553/Virtual Operation 4294967295:284 |
View Raw JSON Data
{
"block": 66980553,
"op": [
"expired_account_notification",
{
"account": "hakancelik"
}
],
"op_in_trx": 284,
"timestamp": "2022-08-13T11:14:24",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}we-the-peoplesent 0.001 HIVE to @hakancelik- "Hi hakancelik my name is we-the-people, I'm a Hive witness. I am sending you 0.001 Hive to ask you to consider voting for we-the-people as a witness. You can find more informations at this link https:..."2020/06/17 14:31:45
we-the-peoplesent 0.001 HIVE to @hakancelik- "Hi hakancelik my name is we-the-people, I'm a Hive witness. I am sending you 0.001 Hive to ask you to consider voting for we-the-people as a witness. You can find more informations at this link https:..."
2020/06/17 14:31:45
| amount | 0.001 HIVE |
| from | we-the-people |
| memo | Hi hakancelik my name is we-the-people, I'm a Hive witness. I am sending you 0.001 Hive to ask you to consider voting for we-the-people as a witness. You can find more informations at this link https://peakd.com/witness/@we-the-people/we-the-people-your-witness or you can join this Discord server https://discord.gg/4jmkqwe |
| to | hakancelik |
| Transaction Info | Block #44373211/Trx 68550d5dbfbc3ba21bd16ff012aca6f25b4e7989 |
View Raw JSON Data
{
"block": 44373211,
"op": [
"transfer",
{
"amount": "0.001 HIVE",
"from": "we-the-people",
"memo": "Hi hakancelik my name is we-the-people, I'm a Hive witness. I am sending you 0.001 Hive to ask you to consider voting for we-the-people as a witness. You can find more informations at this link https://peakd.com/witness/@we-the-people/we-the-people-your-witness or you can join this Discord server https://discord.gg/4jmkqwe",
"to": "hakancelik"
}
],
"op_in_trx": 0,
"timestamp": "2020-06-17T14:31:45",
"trx_id": "68550d5dbfbc3ba21bd16ff012aca6f25b4e7989",
"trx_in_block": 36,
"virtual_op": false
}2020/06/03 06:57:33
2020/06/03 06:57:33
| author | wehmoen |
| body | |
| json metadata | {} |
| parent author | hakancelik |
| parent permlink | new-features-discord-and-steemit-upvote-bot |
| permlink | re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t044323471z |
| title | |
| Transaction Info | Block #43961942/Trx a3619c8a07beb69303017fdde4e46eb489763e36 |
View Raw JSON Data
{
"block": 43961942,
"op": [
"comment",
{
"author": "wehmoen",
"body": " ",
"json_metadata": "{}",
"parent_author": "hakancelik",
"parent_permlink": "new-features-discord-and-steemit-upvote-bot",
"permlink": "re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t044323471z",
"title": " "
}
],
"op_in_trx": 0,
"timestamp": "2020-06-03T06:57:33",
"trx_id": "a3619c8a07beb69303017fdde4e46eb489763e36",
"trx_in_block": 5,
"virtual_op": false
}2020/06/03 06:47:21
2020/06/03 06:47:21
| author | wehmoen |
| body | |
| json metadata | {} |
| parent author | hakancelik |
| parent permlink | re-wehmoen-re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t092149440z |
| permlink | re-hakancelik-re-wehmoen-re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t155858703z |
| title | |
| Transaction Info | Block #43961738/Trx 2885a9071b810386e81ba7aff245103828fac200 |
View Raw JSON Data
{
"block": 43961738,
"op": [
"comment",
{
"author": "wehmoen",
"body": " ",
"json_metadata": "{}",
"parent_author": "hakancelik",
"parent_permlink": "re-wehmoen-re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t092149440z",
"permlink": "re-hakancelik-re-wehmoen-re-hakancelik-new-features-discord-and-steemit-upvote-bot-20180318t155858703z",
"title": " "
}
],
"op_in_trx": 0,
"timestamp": "2020-06-03T06:47:21",
"trx_id": "2885a9071b810386e81ba7aff245103828fac200",
"trx_in_block": 11,
"virtual_op": false
}wise-teamsent 0.001 HIVE to @hakancelik- "We've decided to suspend the Wise Team. Please move your witness vote to @engrave if you are still willing to support our core member. Thank you for your support and please read our statement here: ht..."2020/05/07 08:35:27
wise-teamsent 0.001 HIVE to @hakancelik- "We've decided to suspend the Wise Team. Please move your witness vote to @engrave if you are still willing to support our core member. Thank you for your support and please read our statement here: ht..."
2020/05/07 08:35:27
| amount | 0.001 HIVE |
| from | wise-team |
| memo | We've decided to suspend the Wise Team. Please move your witness vote to @engrave if you are still willing to support our core member. Thank you for your support and please read our statement here: https://peakd.com/witness/@wise-team/we-are-suspending-wise-team-engrave-started-his-own-witness |
| to | hakancelik |
| Transaction Info | Block #43188617/Trx e85cf223e0e8b39ef393d524bd46bb68175a642e |
View Raw JSON Data
{
"block": 43188617,
"op": [
"transfer",
{
"amount": "0.001 HIVE",
"from": "wise-team",
"memo": "We've decided to suspend the Wise Team. Please move your witness vote to @engrave if you are still willing to support our core member. Thank you for your support and please read our statement here: https://peakd.com/witness/@wise-team/we-are-suspending-wise-team-engrave-started-his-own-witness",
"to": "hakancelik"
}
],
"op_in_trx": 85,
"timestamp": "2020-05-07T08:35:27",
"trx_id": "e85cf223e0e8b39ef393d524bd46bb68175a642e",
"trx_in_block": 0,
"virtual_op": false
}hakancelikcustom json: notify2020/02/20 11:47:09
hakancelikcustom json: notify
2020/02/20 11:47:09
| id | notify |
| json | ["setLastRead",{"date":"2020-02-20T11:47:03"}] |
| required auths | [] |
| required posting auths | ["hakancelik"] |
| Transaction Info | Block #40983549/Trx 5d9c6284d3a27e2c9960afc9b3028d81b2fd24d3 |
View Raw JSON Data
{
"block": 40983549,
"op": [
"custom_json",
{
"id": "notify",
"json": "[\"setLastRead\",{\"date\":\"2020-02-20T11:47:03\"}]",
"required_auths": [],
"required_posting_auths": [
"hakancelik"
]
}
],
"op_in_trx": 0,
"timestamp": "2020-02-20T11:47:09",
"trx_id": "5d9c6284d3a27e2c9960afc9b3028d81b2fd24d3",
"trx_in_block": 8,
"virtual_op": false
}hakancelikupdated their account properties2020/02/20 11:46:51
hakancelikupdated their account properties
2020/02/20 11:46:51
| account | hakancelik |
| extensions | [] |
| json metadata | |
| posting json metadata | {"profile":{"name":"Hakan ÇELİK","website":"https://www.coogger.com/@hakancelik96/","location":"world","profile_image":"https://resmim.net/f/lQLHFk.jpg","version":2}} |
| Transaction Info | Block #40983543/Trx 0864c9fb56138b7ec85f6b4f62ae3b8c9234b68e |
View Raw JSON Data
{
"block": 40983543,
"op": [
"account_update2",
{
"account": "hakancelik",
"extensions": [],
"json_metadata": "",
"posting_json_metadata": "{\"profile\":{\"name\":\"Hakan ÇELİK\",\"website\":\"https://www.coogger.com/@hakancelik96/\",\"location\":\"world\",\"profile_image\":\"https://resmim.net/f/lQLHFk.jpg\",\"version\":2}}"
}
],
"op_in_trx": 0,
"timestamp": "2020-02-20T11:46:51",
"trx_id": "0864c9fb56138b7ec85f6b4f62ae3b8c9234b68e",
"trx_in_block": 31,
"virtual_op": false
}themilkymarksent 0.001 HIVE to @hakancelik- "Please REMOVE your witness vote from the downvote freek @themarkymark, he doesn't deserve to be in the top 20 witnesses! You have 24 HOURS from now to act, otherwise you will be DOWNVOTED! (Just let y..."2020/02/11 17:47:03
themilkymarksent 0.001 HIVE to @hakancelik- "Please REMOVE your witness vote from the downvote freek @themarkymark, he doesn't deserve to be in the top 20 witnesses! You have 24 HOURS from now to act, otherwise you will be DOWNVOTED! (Just let y..."
2020/02/11 17:47:03
| amount | 0.001 HIVE |
| from | themilkymark |
| memo | Please REMOVE your witness vote from the downvote freek @themarkymark, he doesn't deserve to be in the top 20 witnesses! You have 24 HOURS from now to act, otherwise you will be DOWNVOTED! (Just let you know how you feel when you received downvotes) Link to remove the witness vote: https://beta.steemconnect.com/sign/account-witness-vote?witness=themarkymark&approve=0 For reasons to remove the vote, please check out this post: https://busy.org/@fuk.themarkymark/fuck-themarkymark |
| to | hakancelik |
| Transaction Info | Block #40732058/Trx bdf9b66471d9a4d70fcae87f1219b2a01f2441fe |
View Raw JSON Data
{
"block": 40732058,
"op": [
"transfer",
{
"amount": "0.001 HIVE",
"from": "themilkymark",
"memo": "Please REMOVE your witness vote from the downvote freek @themarkymark, he doesn't deserve to be in the top 20 witnesses! You have 24 HOURS from now to act, otherwise you will be DOWNVOTED! (Just let you know how you feel when you received downvotes) Link to remove the witness vote: https://beta.steemconnect.com/sign/account-witness-vote?witness=themarkymark&approve=0 For reasons to remove the vote, please check out this post: https://busy.org/@fuk.themarkymark/fuck-themarkymark",
"to": "hakancelik"
}
],
"op_in_trx": 0,
"timestamp": "2020-02-11T17:47:03",
"trx_id": "bdf9b66471d9a4d70fcae87f1219b2a01f2441fe",
"trx_in_block": 108,
"virtual_op": false
}2020/01/23 19:15:12
2020/01/23 19:15:12
| author | steemitboard |
| body | Congratulations @hakancelik! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@hakancelik/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@hakancelik) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=hakancelik)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | hakancelik |
| parent permlink | django-admin-actions |
| permlink | steemitboard-notify-hakancelik-20200123t191509000z |
| title | |
| Transaction Info | Block #40187767/Trx 35c870bb9a92d6ac800af0f66aa2f07401e74f27 |
View Raw JSON Data
{
"block": 40187767,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @hakancelik! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@hakancelik/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@hakancelik) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=hakancelik)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "hakancelik",
"parent_permlink": "django-admin-actions",
"permlink": "steemitboard-notify-hakancelik-20200123t191509000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2020-01-23T19:15:12",
"trx_id": "35c870bb9a92d6ac800af0f66aa2f07401e74f27",
"trx_in_block": 13,
"virtual_op": false
}hakancelikreceived 0.000 HIVE from power down installment (0.000 HP)2019/10/01 15:07:39
hakancelikreceived 0.000 HIVE from power down installment (0.000 HP)
2019/10/01 15:07:39
| deposited | 0.000 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 0.000007 VESTS |
| Transaction Info | Block #36905915/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"block": 36905915,
"op": [
"fill_vesting_withdraw",
{
"deposited": "0.000 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "0.000007 VESTS"
}
],
"op_in_trx": 4,
"timestamp": "2019-10-01T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakanceliksent 7.805 HIVE to @deepcrypto8- "102840951"2019/09/26 15:15:21
hakanceliksent 7.805 HIVE to @deepcrypto8- "102840951"
2019/09/26 15:15:21
| amount | 7.805 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #36762379/Trx d50767bdee4e68c9195a00f6b6f7651a8074355c |
View Raw JSON Data
{
"block": 36762379,
"op": [
"transfer",
{
"amount": "7.805 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-09-26T15:15:21",
"trx_id": "d50767bdee4e68c9195a00f6b6f7651a8074355c",
"trx_in_block": 26,
"virtual_op": false
}hakancelikbought 0.037 HIVE for 0.008 HBD from @quantumdeveloper2019/09/26 15:14:48
hakancelikbought 0.037 HIVE for 0.008 HBD from @quantumdeveloper
2019/09/26 15:14:48
| current orderid | 1569510883 |
| current owner | hakancelik |
| current pays | 0.008 HBD |
| open orderid | 2576497529 |
| open owner | quantumdeveloper |
| open pays | 0.037 HIVE |
| Transaction Info | Block #36762368/Trx 59e66f6cb8ea88a82965bf3b2fea1e7e84a4ac88 |
View Raw JSON Data
{
"block": 36762368,
"op": [
"fill_order",
{
"current_orderid": 1569510883,
"current_owner": "hakancelik",
"current_pays": "0.008 HBD",
"open_orderid": 2576497529,
"open_owner": "quantumdeveloper",
"open_pays": "0.037 HIVE"
}
],
"op_in_trx": 1,
"timestamp": "2019-09-26T15:14:48",
"trx_id": "59e66f6cb8ea88a82965bf3b2fea1e7e84a4ac88",
"trx_in_block": 46,
"virtual_op": true
}hakancelikblockchain operation: limit order create2019/09/26 15:14:48
hakancelikblockchain operation: limit order create
2019/09/26 15:14:48
| amount to sell | 0.008 HBD |
| expiration | 2019-10-23T15:14:37 |
| fill or kill | false |
| min to receive | 0.037 HIVE |
| orderid | 1569510883 |
| owner | hakancelik |
| Transaction Info | Block #36762368/Trx 59e66f6cb8ea88a82965bf3b2fea1e7e84a4ac88 |
View Raw JSON Data
{
"block": 36762368,
"op": [
"limit_order_create",
{
"amount_to_sell": "0.008 HBD",
"expiration": "2019-10-23T15:14:37",
"fill_or_kill": false,
"min_to_receive": "0.037 HIVE",
"orderid": 1569510883,
"owner": "hakancelik"
}
],
"op_in_trx": 0,
"timestamp": "2019-09-26T15:14:48",
"trx_id": "59e66f6cb8ea88a82965bf3b2fea1e7e84a4ac88",
"trx_in_block": 46,
"virtual_op": false
}hakancelikreceived 7.805 HIVE from power down installment (9.516 HP)2019/09/24 15:07:39
hakancelikreceived 7.805 HIVE from power down installment (9.516 HP)
2019/09/24 15:07:39
| deposited | 7.805 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #36704745/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"block": 36704745,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.805 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 3,
"timestamp": "2019-09-24T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakanceliksent 62.325 HIVE to @deepcrypto8- "102840951"2019/09/18 10:18:12
hakanceliksent 62.325 HIVE to @deepcrypto8- "102840951"
2019/09/18 10:18:12
| amount | 62.325 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #36526526/Trx 8ccb4a222e771c7a4f112dd9f9a2f7ebc670a9e4 |
View Raw JSON Data
{
"block": 36526526,
"op": [
"transfer",
{
"amount": "62.325 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-09-18T10:18:12",
"trx_id": "8ccb4a222e771c7a4f112dd9f9a2f7ebc670a9e4",
"trx_in_block": 11,
"virtual_op": false
}hakancelikreceived 7.802 HIVE from power down installment (9.516 HP)2019/09/17 15:07:39
hakancelikreceived 7.802 HIVE from power down installment (9.516 HP)
2019/09/17 15:07:39
| deposited | 7.802 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #36503563/Virtual Operation 4294967295:19 |
View Raw JSON Data
{
"block": 36503563,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.802 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 19,
"timestamp": "2019-09-17T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.799 HIVE from power down installment (9.516 HP)2019/09/10 15:07:39
hakancelikreceived 7.799 HIVE from power down installment (9.516 HP)
2019/09/10 15:07:39
| deposited | 7.799 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #36302499/Virtual Operation 4294967295:14 |
View Raw JSON Data
{
"block": 36302499,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.799 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 14,
"timestamp": "2019-09-10T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.795 HIVE from power down installment (9.516 HP)2019/09/03 15:07:39
hakancelikreceived 7.795 HIVE from power down installment (9.516 HP)
2019/09/03 15:07:39
| deposited | 7.795 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #36101887/Virtual Operation 4294967295:2 |
View Raw JSON Data
{
"block": 36101887,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.795 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 2,
"timestamp": "2019-09-03T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.792 HIVE from power down installment (9.516 HP)2019/08/27 15:07:42
hakancelikreceived 7.792 HIVE from power down installment (9.516 HP)
2019/08/27 15:07:42
| deposited | 7.792 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #35921932/Virtual Operation 4294967295:40 |
View Raw JSON Data
{
"block": 35921932,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.792 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 40,
"timestamp": "2019-08-27T15:07:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}dtubesent 0.001 HIVE to @hakancelik- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"2019/08/22 15:21:54
dtubesent 0.001 HIVE to @hakancelik- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 15:21:54
| amount | 0.001 HIVE |
| from | dtube |
| memo | Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube |
| to | hakancelik |
| Transaction Info | Block #35778448/Trx 8885ad653876527681c1c007fe60b4ebf78cdf65 |
View Raw JSON Data
{
"block": 35778448,
"op": [
"transfer",
{
"amount": "0.001 HIVE",
"from": "dtube",
"memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
"to": "hakancelik"
}
],
"op_in_trx": 45,
"timestamp": "2019-08-22T15:21:54",
"trx_id": "8885ad653876527681c1c007fe60b4ebf78cdf65",
"trx_in_block": 20,
"virtual_op": false
}hakancelikreceived 7.789 HIVE from power down installment (9.516 HP)2019/08/20 15:07:39
hakancelikreceived 7.789 HIVE from power down installment (9.516 HP)
2019/08/20 15:07:39
| deposited | 7.789 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #35720663/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"block": 35720663,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.789 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 5,
"timestamp": "2019-08-20T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.786 HIVE from power down installment (9.516 HP)2019/08/13 15:07:39
hakancelikreceived 7.786 HIVE from power down installment (9.516 HP)
2019/08/13 15:07:39
| deposited | 7.786 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #35519402/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"block": 35519402,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.786 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 6,
"timestamp": "2019-08-13T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.782 HIVE from power down installment (9.516 HP)2019/08/06 15:07:39
hakancelikreceived 7.782 HIVE from power down installment (9.516 HP)
2019/08/06 15:07:39
| deposited | 7.782 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #35319019/Virtual Operation 4294967295:24 |
View Raw JSON Data
{
"block": 35319019,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.782 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 24,
"timestamp": "2019-08-06T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikeffective vote applied for @steemitblog / follow-up-poll-expanding-mute2019/07/30 16:34:15
hakancelikeffective vote applied for @steemitblog / follow-up-poll-expanding-mute
2019/07/30 16:34:15
| author | steemitblog |
| pending payout | 0.470 HBD |
| permlink | follow-up-poll-expanding-mute |
| rshares | 2311696286 |
| total vote weight | 1168672 |
| voter | hakancelik |
| weight | 1103 (11.03%) |
| Transaction Info | Block #35119569/Trx 6360c53cacc7c211044f77ee5d237194dd1f740e |
View Raw JSON Data
{
"block": 35119569,
"op": [
"effective_comment_vote",
{
"author": "steemitblog",
"pending_payout": "0.470 HBD",
"permlink": "follow-up-poll-expanding-mute",
"rshares": 2311696286,
"total_vote_weight": 1168672,
"voter": "hakancelik",
"weight": 1103
}
],
"op_in_trx": 1,
"timestamp": "2019-07-30T16:34:15",
"trx_id": "6360c53cacc7c211044f77ee5d237194dd1f740e",
"trx_in_block": 26,
"virtual_op": true
}hakancelikupvoted (100.00%) @steemitblog / follow-up-poll-expanding-mute2019/07/30 16:34:15
hakancelikupvoted (100.00%) @steemitblog / follow-up-poll-expanding-mute
2019/07/30 16:34:15
| author | steemitblog |
| permlink | follow-up-poll-expanding-mute |
| voter | hakancelik |
| weight | 10000 (100.00%) |
| Transaction Info | Block #35119569/Trx 6360c53cacc7c211044f77ee5d237194dd1f740e |
View Raw JSON Data
{
"block": 35119569,
"op": [
"vote",
{
"author": "steemitblog",
"permlink": "follow-up-poll-expanding-mute",
"voter": "hakancelik",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-07-30T16:34:15",
"trx_id": "6360c53cacc7c211044f77ee5d237194dd1f740e",
"trx_in_block": 26,
"virtual_op": false
}hakancelikreceived 7.779 HIVE from power down installment (9.516 HP)2019/07/30 15:07:39
hakancelikreceived 7.779 HIVE from power down installment (9.516 HP)
2019/07/30 15:07:39
| deposited | 7.779 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #35117839/Virtual Operation 4294967295:2 |
View Raw JSON Data
{
"block": 35117839,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.779 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 2,
"timestamp": "2019-07-30T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakanceliksent 23.317 HIVE to @deepcrypto8- "102840951"2019/07/25 11:20:09
hakanceliksent 23.317 HIVE to @deepcrypto8- "102840951"
2019/07/25 11:20:09
| amount | 23.317 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #34969495/Trx ee04c216aa90f5681d3a001eb6d90852e9f6ba9d |
View Raw JSON Data
{
"block": 34969495,
"op": [
"transfer",
{
"amount": "23.317 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-07-25T11:20:09",
"trx_id": "ee04c216aa90f5681d3a001eb6d90852e9f6ba9d",
"trx_in_block": 22,
"virtual_op": false
}hakancelikreceived 7.776 HIVE from power down installment (9.516 HP)2019/07/23 15:07:39
hakancelikreceived 7.776 HIVE from power down installment (9.516 HP)
2019/07/23 15:07:39
| deposited | 7.776 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #34916880/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"block": 34916880,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.776 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 3,
"timestamp": "2019-07-23T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.772 HIVE from power down installment (9.516 HP)2019/07/16 15:07:39
hakancelikreceived 7.772 HIVE from power down installment (9.516 HP)
2019/07/16 15:07:39
| deposited | 7.772 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #34715515/Virtual Operation 4294967295:38 |
View Raw JSON Data
{
"block": 34715515,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.772 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 38,
"timestamp": "2019-07-16T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 7.769 HIVE from power down installment (9.516 HP)2019/07/09 15:07:39
hakancelikreceived 7.769 HIVE from power down installment (9.516 HP)
2019/07/09 15:07:39
| deposited | 7.769 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #34514135/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"block": 34514135,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.769 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 4,
"timestamp": "2019-07-09T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakanceliksent 7.766 HIVE to @deepcrypto8- "102840951"2019/07/02 22:14:57
hakanceliksent 7.766 HIVE to @deepcrypto8- "102840951"
2019/07/02 22:14:57
| amount | 7.766 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #34321391/Trx f6240851e955ea3d12e05abae134b18a86121ec5 |
View Raw JSON Data
{
"block": 34321391,
"op": [
"transfer",
{
"amount": "7.766 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-07-02T22:14:57",
"trx_id": "f6240851e955ea3d12e05abae134b18a86121ec5",
"trx_in_block": 21,
"virtual_op": false
}hakancelikreceived 7.766 HIVE from power down installment (9.516 HP)2019/07/02 15:07:39
hakancelikreceived 7.766 HIVE from power down installment (9.516 HP)
2019/07/02 15:07:39
| deposited | 7.766 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 15447.676797 VESTS |
| Transaction Info | Block #34312861/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"block": 34312861,
"op": [
"fill_vesting_withdraw",
{
"deposited": "7.766 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "15447.676797 VESTS"
}
],
"op_in_trx": 6,
"timestamp": "2019-07-02T15:07:39",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikupdated their account properties2019/06/30 21:08:39
hakancelikupdated their account properties
2019/06/30 21:08:39
| account | hakancelik |
| json metadata | {"profile":{"name":"Hakan ÇELİK","about":"Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96","website":"https://www.coogger.com/@hakancelik96/","location":"world","cover_image":"http://www.coogger.com/static/logos/png/800.png","profile_image":"https://resmim.net/f/lQLHFk.jpg"}} |
| memo key | STM8kD92xTrZyuhbJnMX4HM5X1Jdzn8naNV9M6Yy7SZs94rbJYm3a |
| Transaction Info | Block #34262523/Trx 7eae66ed98550535065814ff680bff0b128b3739 |
View Raw JSON Data
{
"block": 34262523,
"op": [
"account_update",
{
"account": "hakancelik",
"json_metadata": "{\"profile\":{\"name\":\"Hakan ÇELİK\",\"about\":\"Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96\",\"website\":\"https://www.coogger.com/@hakancelik96/\",\"location\":\"world\",\"cover_image\":\"http://www.coogger.com/static/logos/png/800.png\",\"profile_image\":\"https://resmim.net/f/lQLHFk.jpg\"}}",
"memo_key": "STM8kD92xTrZyuhbJnMX4HM5X1Jdzn8naNV9M6Yy7SZs94rbJYm3a"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-30T21:08:39",
"trx_id": "7eae66ed98550535065814ff680bff0b128b3739",
"trx_in_block": 6,
"virtual_op": false
}hakancelikstarted power down of 123.712 HP2019/06/25 15:07:42
hakancelikstarted power down of 123.712 HP
2019/06/25 15:07:42
| account | hakancelik |
| vesting shares | 200819.798368 VESTS |
| Transaction Info | Block #34111483/Trx 1f64682a62ba42ed46a2af717cc12531316a58da |
View Raw JSON Data
{
"block": 34111483,
"op": [
"withdraw_vesting",
{
"account": "hakancelik",
"vesting_shares": "200819.798368 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-25T15:07:42",
"trx_id": "1f64682a62ba42ed46a2af717cc12531316a58da",
"trx_in_block": 20,
"virtual_op": false
}hakancelikcancelled power down2019/06/25 15:07:30
hakancelikcancelled power down
2019/06/25 15:07:30
| account | hakancelik |
| vesting shares | 0.000000 VESTS |
| Transaction Info | Block #34111479/Trx e91b45d144bc05edd001b40403837c5be48b4d60 |
View Raw JSON Data
{
"block": 34111479,
"op": [
"withdraw_vesting",
{
"account": "hakancelik",
"vesting_shares": "0.000000 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-25T15:07:30",
"trx_id": "e91b45d144bc05edd001b40403837c5be48b4d60",
"trx_in_block": 0,
"virtual_op": false
}hakanceliksent 6.946 HIVE to @deepcrypto8- "102840951"2019/06/25 15:07:06
hakanceliksent 6.946 HIVE to @deepcrypto8- "102840951"
2019/06/25 15:07:06
| amount | 6.946 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #34111471/Trx ba65cad13a970ff6617163f262cf1fff42b5bb61 |
View Raw JSON Data
{
"block": 34111471,
"op": [
"transfer",
{
"amount": "6.946 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-25T15:07:06",
"trx_id": "ba65cad13a970ff6617163f262cf1fff42b5bb61",
"trx_in_block": 3,
"virtual_op": false
}hakancelikreceived 6.946 HIVE from power down installment (8.516 HP)2019/06/25 09:14:42
hakancelikreceived 6.946 HIVE from power down installment (8.516 HP)
2019/06/25 09:14:42
| deposited | 6.946 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 13823.055655 VESTS |
| Transaction Info | Block #34104430/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"block": 34104430,
"op": [
"fill_vesting_withdraw",
{
"deposited": "6.946 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "13823.055655 VESTS"
}
],
"op_in_trx": 6,
"timestamp": "2019-06-25T09:14:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreturned a vesting delegation2019/06/23 17:42:48
hakancelikreturned a vesting delegation
2019/06/23 17:42:48
| account | hakancelik |
| vesting shares | 80137.141764 VESTS |
| Transaction Info | Block #34057040/Virtual Operation 4294967295:1 |
View Raw JSON Data
{
"block": 34057040,
"op": [
"return_vesting_delegation",
{
"account": "hakancelik",
"vesting_shares": "80137.141764 VESTS"
}
],
"op_in_trx": 1,
"timestamp": "2019-06-23T17:42:48",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreturned a vesting delegation2019/06/23 17:42:30
hakancelikreturned a vesting delegation
2019/06/23 17:42:30
| account | hakancelik |
| vesting shares | 20047.978987 VESTS |
| Transaction Info | Block #34057034/Virtual Operation 4294967295:1 |
View Raw JSON Data
{
"block": 34057034,
"op": [
"return_vesting_delegation",
{
"account": "hakancelik",
"vesting_shares": "20047.978987 VESTS"
}
],
"op_in_trx": 1,
"timestamp": "2019-06-23T17:42:30",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikdelegated 0.000 HP to @coogger2019/06/18 17:42:48
hakancelikdelegated 0.000 HP to @coogger
2019/06/18 17:42:48
| delegatee | coogger |
| delegator | hakancelik |
| vesting shares | 0.000000 VESTS |
| Transaction Info | Block #33913177/Trx 2302c8129dd8a7fd8d5a877d3f4921c410a963af |
View Raw JSON Data
{
"block": 33913177,
"op": [
"delegate_vesting_shares",
{
"delegatee": "coogger",
"delegator": "hakancelik",
"vesting_shares": "0.000000 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-18T17:42:48",
"trx_id": "2302c8129dd8a7fd8d5a877d3f4921c410a963af",
"trx_in_block": 33,
"virtual_op": false
}hakancelikdelegated 0.000 HP to @yasinbuyuker2019/06/18 17:42:30
hakancelikdelegated 0.000 HP to @yasinbuyuker
2019/06/18 17:42:30
| delegatee | yasinbuyuker |
| delegator | hakancelik |
| vesting shares | 0.000000 VESTS |
| Transaction Info | Block #33913171/Trx bee00bf4d3eb1b5e4e3baeae1988d9316854ba1a |
View Raw JSON Data
{
"block": 33913171,
"op": [
"delegate_vesting_shares",
{
"delegatee": "yasinbuyuker",
"delegator": "hakancelik",
"vesting_shares": "0.000000 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-18T17:42:30",
"trx_id": "bee00bf4d3eb1b5e4e3baeae1988d9316854ba1a",
"trx_in_block": 8,
"virtual_op": false
}hakanceliksent 46.762 HIVE to @deepcrypto8- "102840951"2019/06/18 17:39:57
hakanceliksent 46.762 HIVE to @deepcrypto8- "102840951"
2019/06/18 17:39:57
| amount | 46.762 HIVE |
| from | hakancelik |
| memo | 102840951 |
| to | deepcrypto8 |
| Transaction Info | Block #33913120/Trx 6668e599861f2fd79bff732c5ec1015d31dd0fbf |
View Raw JSON Data
{
"block": 33913120,
"op": [
"transfer",
{
"amount": "46.762 HIVE",
"from": "hakancelik",
"memo": "102840951",
"to": "deepcrypto8"
}
],
"op_in_trx": 0,
"timestamp": "2019-06-18T17:39:57",
"trx_id": "6668e599861f2fd79bff732c5ec1015d31dd0fbf",
"trx_in_block": 32,
"virtual_op": false
}hakancelikreceived 6.943 HIVE from power down installment (8.516 HP)2019/06/18 09:14:42
hakancelikreceived 6.943 HIVE from power down installment (8.516 HP)
2019/06/18 09:14:42
| deposited | 6.943 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 13823.055655 VESTS |
| Transaction Info | Block #33903034/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"block": 33903034,
"op": [
"fill_vesting_withdraw",
{
"deposited": "6.943 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "13823.055655 VESTS"
}
],
"op_in_trx": 4,
"timestamp": "2019-06-18T09:14:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 6.941 HIVE from power down installment (8.516 HP)2019/06/11 09:14:42
hakancelikreceived 6.941 HIVE from power down installment (8.516 HP)
2019/06/11 09:14:42
| deposited | 6.941 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 13823.055655 VESTS |
| Transaction Info | Block #33701886/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"block": 33701886,
"op": [
"fill_vesting_withdraw",
{
"deposited": "6.941 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "13823.055655 VESTS"
}
],
"op_in_trx": 4,
"timestamp": "2019-06-11T09:14:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 6.938 HIVE from power down installment (8.516 HP)2019/06/04 09:14:42
hakancelikreceived 6.938 HIVE from power down installment (8.516 HP)
2019/06/04 09:14:42
| deposited | 6.938 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 13823.055655 VESTS |
| Transaction Info | Block #33500571/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"block": 33500571,
"op": [
"fill_vesting_withdraw",
{
"deposited": "6.938 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "13823.055655 VESTS"
}
],
"op_in_trx": 4,
"timestamp": "2019-06-04T09:14:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikupvoted (100.00%) @hakancelik / django-admin-actions2019/05/30 08:13:45
hakancelikupvoted (100.00%) @hakancelik / django-admin-actions
2019/05/30 08:13:45
| author | hakancelik |
| permlink | django-admin-actions |
| voter | hakancelik |
| weight | 10000 (100.00%) |
| Transaction Info | Block #33355504/Trx ff8e5b8e6b6f8e246697438e78202dc22a9b13c3 |
View Raw JSON Data
{
"block": 33355504,
"op": [
"vote",
{
"author": "hakancelik",
"permlink": "django-admin-actions",
"voter": "hakancelik",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-30T08:13:45",
"trx_id": "ff8e5b8e6b6f8e246697438e78202dc22a9b13c3",
"trx_in_block": 11,
"virtual_op": false
}hakancelikupdated payout for django-admin-actions2019/05/29 08:53:21
hakancelikupdated payout for django-admin-actions
2019/05/29 08:53:21
| author | hakancelik |
| permlink | django-admin-actions |
| Transaction Info | Block #33327520/Virtual Operation 4294967295:39 |
View Raw JSON Data
{
"block": 33327520,
"op": [
"comment_payout_update",
{
"author": "hakancelik",
"permlink": "django-admin-actions"
}
],
"op_in_trx": 39,
"timestamp": "2019-05-29T08:53:21",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikreceived 6.935 HIVE from power down installment (8.516 HP)2019/05/28 09:14:42
hakancelikreceived 6.935 HIVE from power down installment (8.516 HP)
2019/05/28 09:14:42
| deposited | 6.935 HIVE |
| from account | hakancelik |
| to account | hakancelik |
| withdrawn | 13823.055655 VESTS |
| Transaction Info | Block #33299176/Virtual Operation 4294967295:55 |
View Raw JSON Data
{
"block": 33299176,
"op": [
"fill_vesting_withdraw",
{
"deposited": "6.935 HIVE",
"from_account": "hakancelik",
"to_account": "hakancelik",
"withdrawn": "13823.055655 VESTS"
}
],
"op_in_trx": 55,
"timestamp": "2019-05-28T09:14:42",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}murattatareffective vote applied for @hakancelik / django-admin-actions2019/05/22 09:08:30
murattatareffective vote applied for @hakancelik / django-admin-actions
2019/05/22 09:08:30
| author | hakancelik |
| pending payout | 0.004 HBD |
| permlink | django-admin-actions |
| rshares | 7224881590 |
| total vote weight | 94065 |
| voter | murattatar |
| weight | 65330 |
| Transaction Info | Block #33126394/Trx 20a99a6b211e39710f50e6e47765246843be57f6 |
View Raw JSON Data
{
"block": 33126394,
"op": [
"effective_comment_vote",
{
"author": "hakancelik",
"pending_payout": "0.004 HBD",
"permlink": "django-admin-actions",
"rshares": 7224881590,
"total_vote_weight": 94065,
"voter": "murattatar",
"weight": 65330
}
],
"op_in_trx": 1,
"timestamp": "2019-05-22T09:08:30",
"trx_id": "20a99a6b211e39710f50e6e47765246843be57f6",
"trx_in_block": 47,
"virtual_op": true
}murattatarupvoted (20.00%) @hakancelik / django-admin-actions2019/05/22 09:08:30
murattatarupvoted (20.00%) @hakancelik / django-admin-actions
2019/05/22 09:08:30
| author | hakancelik |
| permlink | django-admin-actions |
| voter | murattatar |
| weight | 2000 (20.00%) |
| Transaction Info | Block #33126394/Trx 20a99a6b211e39710f50e6e47765246843be57f6 |
View Raw JSON Data
{
"block": 33126394,
"op": [
"vote",
{
"author": "hakancelik",
"permlink": "django-admin-actions",
"voter": "murattatar",
"weight": 2000
}
],
"op_in_trx": 0,
"timestamp": "2019-05-22T09:08:30",
"trx_id": "20a99a6b211e39710f50e6e47765246843be57f6",
"trx_in_block": 47,
"virtual_op": false
}microboteffective vote applied for @hakancelik / django-admin-actions2019/05/22 08:54:33
microboteffective vote applied for @hakancelik / django-admin-actions
2019/05/22 08:54:33
| author | hakancelik |
| pending payout | 0.000 HBD |
| permlink | django-admin-actions |
| rshares | 809444091 |
| total vote weight | 28735 |
| voter | microbot |
| weight | 2203 (22.03%) |
| Transaction Info | Block #33126116/Trx 927e026286c5f8f2d665caac3e523e173a795b91 |
View Raw JSON Data
{
"block": 33126116,
"op": [
"effective_comment_vote",
{
"author": "hakancelik",
"pending_payout": "0.000 HBD",
"permlink": "django-admin-actions",
"rshares": 809444091,
"total_vote_weight": 28735,
"voter": "microbot",
"weight": 2203
}
],
"op_in_trx": 1,
"timestamp": "2019-05-22T08:54:33",
"trx_id": "927e026286c5f8f2d665caac3e523e173a795b91",
"trx_in_block": 22,
"virtual_op": true
}microbotupvoted (5.00%) @hakancelik / django-admin-actions2019/05/22 08:54:33
microbotupvoted (5.00%) @hakancelik / django-admin-actions
2019/05/22 08:54:33
| author | hakancelik |
| permlink | django-admin-actions |
| voter | microbot |
| weight | 500 (5.00%) |
| Transaction Info | Block #33126116/Trx 927e026286c5f8f2d665caac3e523e173a795b91 |
View Raw JSON Data
{
"block": 33126116,
"op": [
"vote",
{
"author": "hakancelik",
"permlink": "django-admin-actions",
"voter": "microbot",
"weight": 500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-22T08:54:33",
"trx_id": "927e026286c5f8f2d665caac3e523e173a795b91",
"trx_in_block": 22,
"virtual_op": false
}hakancelikpublished a new post: django-admin-actions2019/05/22 08:53:24
hakancelikpublished a new post: django-admin-actions
2019/05/22 08:53:24
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/django-admin-actions"> <img alt="admin-actions" src="https://www.coogger.com/media/images/admin-actions.png"> </a> <a href="https://www.coogger.com/@hakancelik/django-admin-actions">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["django", "coogger", "python", "admin", "action"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "Admin action k\u0131saca se\u00e7ilen nesneler ile toplu i\u015f uygulayabilme olay\u0131d\u0131r, se\u00e7ili b\u00fct\u00fcn kullan\u0131c\u0131lar\u0131 silmek gibi, a\u015fa\u011f\u0131da ki resim hangi konudan bahsetti\u011fimizi anlat\u0131r niteliktedir.\r\n\r\n\r\n\r\nBu i\u00e7erikte **admin.py** dosyam\u0131za yeni **actionlar** yazarak baz\u0131 toplu i\u015flerimizi kolayla\u015ft\u0131raca\u011f\u0131z.\r\n\r\nbenim a\u015fa\u011f\u0131daki gibi bir modelim olsun, bu model ip banlamak i\u00e7in yazd\u0131m, banlanan ip siteye giremeyecek girdi\u011finde hata alacaki, modelimiz a\u015fa\u011f\u0131daki gibi.\r\n\r\n**/models.py**\r\n\r\n```python\r\nfrom django.db import models\r\n\r\nclass IPModel(models.Model):\r\n address = models.GenericIPAddressField(unique=True, verbose_name=\"Ip address\")\r\n ban = models.BooleanField(default=0)\r\n```\r\n\r\n### Action Fonsiyonu Yaz\u0131m\u0131\r\nAction fonksiyonu normal fonksiyon olup 3 tane parametre al\u0131r bunlar\r\n- ModelAdmin\r\n- HttpRequest\r\n- QuerySet\r\n\r\nBu fonksiyonumuz **ModelAdmin** ve **HttpRequest** 'i kullanmayaca\u011f\u0131z bunlar django i\u00e7in gerekli parametreler biz **QuerySet**'i kullanaca\u011f\u0131z.\r\n\r\n\u00f6rne\u011fin\r\n```python\r\ndef remove_ban(modeladmin, request, queryset):\r\n queryset.update(ban=False)\r\n```\r\nBu \u015fekilde yaz\u0131m performansl\u0131 yaz\u0131md\u0131r tabi isterseniz\r\n\r\n```python\r\nfor obj in queryset:\r\n do_something_with(obj)\r\n```\r\n\r\nBunun gibi \u015feylede yapabilirsiniz gelen nesne sizin verdi\u011finiz modeli kullanarak olu\u015fturulmu\u015f bir **queryset** sonu\u00e7ta.\r\n\r\n```python\r\ndef remove_ban(modeladmin, request, queryset):\r\n queryset.update(ban=False)\r\nremove_ban.short_description = 'Remove Ban'\r\n```\r\n\r\nBurada `remove_ban` fonksiyonumuza **short_description** ad\u0131nda bir atama yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcn\u00fcyorz bunun amac\u0131 django bu de\u011fi\u015fkeni admin panelde **list_display** olarak kullan\u0131yor, a\u015fa\u011f\u0131daki resimde nerede kullan\u0131ld\u0131\u011f\u0131 g\u00f6r\u00fclmektedir.\r\n\r\n<center></center>\r\n\r\n\u015eimdi modelim i\u00e7in admin taraf\u0131n\u0131 yazal\u0131m.\r\n**/admin.py**\r\n\r\n```python\r\nfrom django.contrib.admin import ModelAdmin, site\r\nfrom django.http import Http404\r\n\r\nfrom .models import IPModel\r\n\r\ndef remove_ban(modeladmin, request, queryset):\r\n queryset.update(ban=False)\r\nremove_ban.short_description = 'Remove Ban'\r\n\r\ndef banned(modeladmin, request, queryset):\r\n queryset.update(ban=True)\r\nbanned.short_description = 'Banned'\r\n\r\nclass IPAdmin(ModelAdmin):\r\n list_display = [\"address\", , \"ban\"]\r\n list_display_links = [\"address\",, \"ban\"]\r\n list_filter = [\"ban\"]\r\n search_fields = [\"address\"]\r\n fields = (\r\n (\"address\"),\r\n (\"ban\"),\r\n )\r\n actions = [remove_ban, banned]\r\n\r\nsite.register(IPModel,IPAdmin)\r\n```\r\nYukar\u0131daki **admin.py** dosyamda iki tane admin action fonksiyonu yazd\u0131m ve **modeladmin** s\u0131n\u0131f\u0131ma bu actionlar\u0131 **actions = [remove_ban, banned]** \u015feklinde yazd\u0131m, django art\u0131k **IPAdmin** nesnemde iki tane action oldu\u011funu ve bunlar\u0131n g\u00f6revlerini biliyor.\r\n\r\n\u015fimdi admin sayfama gidip birden fazla ip adresi se\u00e7ip bunlar\u0131 toplu olarak banlayabilirim veya ban\u0131n\u0131 kald\u0131rabilirim."}} |
| parent author | |
| parent permlink | coogger |
| permlink | django-admin-actions |
| title | Django Admin Actions |
| Transaction Info | Block #33126093/Trx e37af6d3e241857591681354347ad33ae42fae8d |
View Raw JSON Data
{
"block": 33126093,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-admin-actions\">\n\n\n <img alt=\"admin-actions\" src=\"https://www.coogger.com/media/images/admin-actions.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-admin-actions\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"django\", \"coogger\", \"python\", \"admin\", \"action\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"Admin action k\\u0131saca se\\u00e7ilen nesneler ile toplu i\\u015f uygulayabilme olay\\u0131d\\u0131r, se\\u00e7ili b\\u00fct\\u00fcn kullan\\u0131c\\u0131lar\\u0131 silmek gibi, a\\u015fa\\u011f\\u0131da ki resim hangi konudan bahsetti\\u011fimizi anlat\\u0131r niteliktedir.\\r\\n\\r\\n\\r\\n\\r\\nBu i\\u00e7erikte **admin.py** dosyam\\u0131za yeni **actionlar** yazarak baz\\u0131 toplu i\\u015flerimizi kolayla\\u015ft\\u0131raca\\u011f\\u0131z.\\r\\n\\r\\nbenim a\\u015fa\\u011f\\u0131daki gibi bir modelim olsun, bu model ip banlamak i\\u00e7in yazd\\u0131m, banlanan ip siteye giremeyecek girdi\\u011finde hata alacaki, modelimiz a\\u015fa\\u011f\\u0131daki gibi.\\r\\n\\r\\n**/models.py**\\r\\n\\r\\n```python\\r\\nfrom django.db import models\\r\\n\\r\\nclass IPModel(models.Model):\\r\\n address = models.GenericIPAddressField(unique=True, verbose_name=\\\"Ip address\\\")\\r\\n ban = models.BooleanField(default=0)\\r\\n```\\r\\n\\r\\n### Action Fonsiyonu Yaz\\u0131m\\u0131\\r\\nAction fonksiyonu normal fonksiyon olup 3 tane parametre al\\u0131r bunlar\\r\\n- ModelAdmin\\r\\n- HttpRequest\\r\\n- QuerySet\\r\\n\\r\\nBu fonksiyonumuz **ModelAdmin** ve **HttpRequest** 'i kullanmayaca\\u011f\\u0131z bunlar django i\\u00e7in gerekli parametreler biz **QuerySet**'i kullanaca\\u011f\\u0131z.\\r\\n\\r\\n\\u00f6rne\\u011fin\\r\\n```python\\r\\ndef remove_ban(modeladmin, request, queryset):\\r\\n queryset.update(ban=False)\\r\\n```\\r\\nBu \\u015fekilde yaz\\u0131m performansl\\u0131 yaz\\u0131md\\u0131r tabi isterseniz\\r\\n\\r\\n```python\\r\\nfor obj in queryset:\\r\\n do_something_with(obj)\\r\\n```\\r\\n\\r\\nBunun gibi \\u015feylede yapabilirsiniz gelen nesne sizin verdi\\u011finiz modeli kullanarak olu\\u015fturulmu\\u015f bir **queryset** sonu\\u00e7ta.\\r\\n\\r\\n```python\\r\\ndef remove_ban(modeladmin, request, queryset):\\r\\n queryset.update(ban=False)\\r\\nremove_ban.short_description = 'Remove Ban'\\r\\n```\\r\\n\\r\\nBurada `remove_ban` fonksiyonumuza **short_description** ad\\u0131nda bir atama yap\\u0131ld\\u0131\\u011f\\u0131n\\u0131 g\\u00f6r\\u00fcn\\u00fcyorz bunun amac\\u0131 django bu de\\u011fi\\u015fkeni admin panelde **list_display** olarak kullan\\u0131yor, a\\u015fa\\u011f\\u0131daki resimde nerede kullan\\u0131ld\\u0131\\u011f\\u0131 g\\u00f6r\\u00fclmektedir.\\r\\n\\r\\n<center></center>\\r\\n\\r\\n\\u015eimdi modelim i\\u00e7in admin taraf\\u0131n\\u0131 yazal\\u0131m.\\r\\n**/admin.py**\\r\\n\\r\\n```python\\r\\nfrom django.contrib.admin import ModelAdmin, site\\r\\nfrom django.http import Http404\\r\\n\\r\\nfrom .models import IPModel\\r\\n\\r\\ndef remove_ban(modeladmin, request, queryset):\\r\\n queryset.update(ban=False)\\r\\nremove_ban.short_description = 'Remove Ban'\\r\\n\\r\\ndef banned(modeladmin, request, queryset):\\r\\n queryset.update(ban=True)\\r\\nbanned.short_description = 'Banned'\\r\\n\\r\\nclass IPAdmin(ModelAdmin):\\r\\n list_display = [\\\"address\\\", , \\\"ban\\\"]\\r\\n list_display_links = [\\\"address\\\",, \\\"ban\\\"]\\r\\n list_filter = [\\\"ban\\\"]\\r\\n search_fields = [\\\"address\\\"]\\r\\n fields = (\\r\\n (\\\"address\\\"),\\r\\n (\\\"ban\\\"),\\r\\n )\\r\\n actions = [remove_ban, banned]\\r\\n\\r\\nsite.register(IPModel,IPAdmin)\\r\\n```\\r\\nYukar\\u0131daki **admin.py** dosyamda iki tane admin action fonksiyonu yazd\\u0131m ve **modeladmin** s\\u0131n\\u0131f\\u0131ma bu actionlar\\u0131 **actions = [remove_ban, banned]** \\u015feklinde yazd\\u0131m, django art\\u0131k **IPAdmin** nesnemde iki tane action oldu\\u011funu ve bunlar\\u0131n g\\u00f6revlerini biliyor.\\r\\n\\r\\n\\u015fimdi admin sayfama gidip birden fazla ip adresi se\\u00e7ip bunlar\\u0131 toplu olarak banlayabilirim veya ban\\u0131n\\u0131 kald\\u0131rabilirim.\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "django-admin-actions",
"title": "Django Admin Actions"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-22T08:53:24",
"trx_id": "e37af6d3e241857591681354347ad33ae42fae8d",
"trx_in_block": 36,
"virtual_op": false
}hakancelikpublished a new post: python-client-of-steemconnect-update-steem-connect2019/05/21 10:12:27
hakancelikpublished a new post: python-client-of-steemconnect-update-steem-connect
2019/05/21 10:12:27
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/python-client-of-steemconnect-update-steem-connect"> <img alt="coogger post" src="https://cdn.steemitimages.com/DQmV7q45hYaS1TugkYDmR4NtUuLXjMGDEnN2roxGGXJeYgs"> </a> <a href="https://www.coogger.com/@hakancelik/python-client-of-steemconnect-update-steem-connect">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["python", "steem-connect", "development", "coogger", "english"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "### Before starting\r\nInstallation or Update the package:\r\n```python\r\npip install steem-connect\r\npip install steem-connect -U\r\n```\r\n\r\nYou can include each class in our project, as below.\r\n```python\r\nfrom steemconnect.client import Client\r\nfrom steemconnect.steemconnect import SteemConnect\r\nfrom steemconnect.operations import Vote\r\nfrom steemconnect.operations import CustomJson\r\nfrom steemconnect.operations import Unfollow\r\nfrom steemconnect.operations import Follow\r\nfrom steemconnect.operations import Mute\r\nfrom steemconnect.operations import Reblog\r\nfrom steemconnect.operations import DeleteComment\r\nfrom steemconnect.operations import ClaimRewardBalance\r\nfrom steemconnect.operations import Comment\r\nfrom steemconnect.operations import CommentOptions\r\n```\r\n\r\n### SteemConnect V0.7.3\r\n#### Commit:\r\n\r\n- [V0.7.2](https://github.com/hakancelik96/steemconnect/commit/776a5b44966a0d65ef749958b33e188f7c4a5dce)\r\n- [V0.7.3](https://github.com/hakancelik96/steemconnect/commit/78949686520b4e8150ab3ac3dacb123e9feb13f6)\r\n\r\n\r\n### CustomJson\r\n#### Commit:\r\n\r\n- [CustomJson](https://github.com/hakancelik96/steemconnect/commit/4a2b699abcce5a3101c645ee00e441776961c88f)\r\n\r\n#### CustomJson\r\nThe **CustomJson** class provides to Unfollow operation, Follow operation, Mute operation and whatever do you want.\r\n\r\n```python\r\nfrom steemconnect.operations import CustomJson\r\nfrom steemconnect.steemconnect import SteemConnect\r\n\r\ntoken = \"{your_access_token}\"\r\njson_ = [\r\n \"test\",\r\n {\r\n \"tester\": \"{your_username}\",\r\n \"test_class\": \"CustomJson class\",\r\n \"what\": [\"test\"]\r\n }]\r\n\r\ncustom_json = CustomJson(required_posting_auths=\"{your_username}\", custom_json_id=\"test\" ,structure=json_)\r\nresponse = SteemConnect(token=token, data=custom_json .operation).run\r\nif response.status_code != 200:\r\n print(\"Your operation is success\")\r\n```\r\n\r\n### New syntax\r\n#### Commit:\r\n- [Operations class improved](https://github.com/hakancelik96/steemconnect/commit/776a5b44966a0d65ef749958b33e188f7c4a5dce)\r\n\r\nThanks to this commit, It was made more elegant syntax and easy to use.\r\n#### Let's check old and new\r\n\r\n##### Old syntax\r\n- include each class\r\n```python\r\nfrom sc2py.client import Client\r\nfrom sc2py.sc2py import Sc2\r\nfrom sc2py.operations import Vote\r\nfrom sc2py.operations import Unfollow\r\n```\r\n\r\n- Vote operation\r\n```python\r\nvote = Vote(voter:str, author:str, permlink:str, weight:int)\r\njson_data = Operations(json=vote.json).json\r\nresponse = Sc2(token=\"your_access_token\", data=json_data).run\r\nif response.status_code == 200:\r\n print(\"Your post upvoted\")\r\n```\r\n\r\n##### New syntax\r\n\r\n- include each class\r\n```python\r\nfrom steemconnect.client import Client\r\nfrom steemconnect.steemconnect import SteemConnect\r\nfrom steemconnect.operations import Vote\r\n```\r\n\r\n- Vote operation\r\n```python\r\nvote = Vote(voter:str, author:str, permlink:str, weight:int)\r\nresponse = SteemConnect(token=\"your_access_token\", data=vote.operation).run\r\nif response.status_code == 200:\r\n print(\"Your post upvoted\")\r\n```\r\n\r\n------------\r\n\r\n**If you want to learn more, how to use steem-connect python library [Check readme.md of library V0.7.3](https://github.com/hakancelik96/steemconnect/blob/59e3ff1d896131782e0b08da4dc7705de417d07d/README.md)**\r\n\r\n### Let's do a few examples with steem-connect python library!\r\n\r\n***In addition, you can even enhance the use of the steem-connect library with steem-python library***\r\n\r\n#### This example for upvote bot\r\n\r\n```python\r\nfrom steemconnect.steemconnect import SteemConnect\r\nfrom steemconnect.operations import Vote\r\n\r\nvote = Vote(voter=\"hakancelik\", author=\"enisshkurti\",\r\npermlink=\"make-it-a-september-to-remember\", weight=100)\r\nresponse = SteemConnect(token=\"xxxxxx\", data=vote.operation).run\r\nprint(response.text)\r\n````\r\n\r\n#### This example for follow operation\r\n\r\n```python\r\nfollow = Follow(follower=\"hakancelik\",following=\"enisshkurti\")\r\nresponse = SteemConnect(token=\"xxxxx\", data=follow.operation).run\r\nif response.status_code != 200:\r\n print(\"Your operation is success\")\r\n````\r\n\r\n#### This example for resteem operation with steem-python\r\n\r\n***When these codes run, resteem all the contents of the enisshkurti account.***\r\n\r\n```python\r\n# steem\r\nfrom steem import Steem\r\nfrom steem.blog import Blog\r\n\r\n# SteemConnect\r\nfrom steemconnect.steemconnect import SteemConnect\r\nfrom steemconnect.operations import Reblog\r\n\r\n\r\nSTEEM = Steem(nodes=['https://api.steemit.com'])\r\nfor blog in Blog(account_name = \"enisshkurti\").all():\r\n reblog = Reblog(account=\"hakancelik\", author=\"enisshkurti\", permlink=blog.permlink)\r\n response = SteemConnect(token=\"xxxxx\", data=reblog.operation).run\r\n if response.status_code != 200:\r\n print(\"Your operation is success\")\r\n\r\n```\r\n\r\n<center>**Thank you for reading**</center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | python-client-of-steemconnect-update-steem-connect |
| title | Python Client of SteemConnect - Update: steem-connect |
| Transaction Info | Block #33098890/Trx 954e6c35eb5981ee3707204ae28e073c5be054f6 |
View Raw JSON Data
{
"block": 33098890,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/python-client-of-steemconnect-update-steem-connect\">\n\n\n <img alt=\"coogger post\" src=\"https://cdn.steemitimages.com/DQmV7q45hYaS1TugkYDmR4NtUuLXjMGDEnN2roxGGXJeYgs\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/python-client-of-steemconnect-update-steem-connect\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"python\", \"steem-connect\", \"development\", \"coogger\", \"english\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"### Before starting\\r\\nInstallation or Update the package:\\r\\n```python\\r\\npip install steem-connect\\r\\npip install steem-connect -U\\r\\n```\\r\\n\\r\\nYou can include each class in our project, as below.\\r\\n```python\\r\\nfrom steemconnect.client import Client\\r\\nfrom steemconnect.steemconnect import SteemConnect\\r\\nfrom steemconnect.operations import Vote\\r\\nfrom steemconnect.operations import CustomJson\\r\\nfrom steemconnect.operations import Unfollow\\r\\nfrom steemconnect.operations import Follow\\r\\nfrom steemconnect.operations import Mute\\r\\nfrom steemconnect.operations import Reblog\\r\\nfrom steemconnect.operations import DeleteComment\\r\\nfrom steemconnect.operations import ClaimRewardBalance\\r\\nfrom steemconnect.operations import Comment\\r\\nfrom steemconnect.operations import CommentOptions\\r\\n```\\r\\n\\r\\n### SteemConnect V0.7.3\\r\\n#### Commit:\\r\\n\\r\\n- [V0.7.2](https://github.com/hakancelik96/steemconnect/commit/776a5b44966a0d65ef749958b33e188f7c4a5dce)\\r\\n- [V0.7.3](https://github.com/hakancelik96/steemconnect/commit/78949686520b4e8150ab3ac3dacb123e9feb13f6)\\r\\n\\r\\n\\r\\n### CustomJson\\r\\n#### Commit:\\r\\n\\r\\n- [CustomJson](https://github.com/hakancelik96/steemconnect/commit/4a2b699abcce5a3101c645ee00e441776961c88f)\\r\\n\\r\\n#### CustomJson\\r\\nThe **CustomJson** class provides to Unfollow operation, Follow operation, Mute operation and whatever do you want.\\r\\n\\r\\n```python\\r\\nfrom steemconnect.operations import CustomJson\\r\\nfrom steemconnect.steemconnect import SteemConnect\\r\\n\\r\\ntoken = \\\"{your_access_token}\\\"\\r\\njson_ = [\\r\\n \\\"test\\\",\\r\\n {\\r\\n \\\"tester\\\": \\\"{your_username}\\\",\\r\\n \\\"test_class\\\": \\\"CustomJson class\\\",\\r\\n \\\"what\\\": [\\\"test\\\"]\\r\\n }]\\r\\n\\r\\ncustom_json = CustomJson(required_posting_auths=\\\"{your_username}\\\", custom_json_id=\\\"test\\\" ,structure=json_)\\r\\nresponse = SteemConnect(token=token, data=custom_json .operation).run\\r\\nif response.status_code != 200:\\r\\n print(\\\"Your operation is success\\\")\\r\\n```\\r\\n\\r\\n### New syntax\\r\\n#### Commit:\\r\\n- [Operations class improved](https://github.com/hakancelik96/steemconnect/commit/776a5b44966a0d65ef749958b33e188f7c4a5dce)\\r\\n\\r\\nThanks to this commit, It was made more elegant syntax and easy to use.\\r\\n#### Let's check old and new\\r\\n\\r\\n##### Old syntax\\r\\n- include each class\\r\\n```python\\r\\nfrom sc2py.client import Client\\r\\nfrom sc2py.sc2py import Sc2\\r\\nfrom sc2py.operations import Vote\\r\\nfrom sc2py.operations import Unfollow\\r\\n```\\r\\n\\r\\n- Vote operation\\r\\n```python\\r\\nvote = Vote(voter:str, author:str, permlink:str, weight:int)\\r\\njson_data = Operations(json=vote.json).json\\r\\nresponse = Sc2(token=\\\"your_access_token\\\", data=json_data).run\\r\\nif response.status_code == 200:\\r\\n print(\\\"Your post upvoted\\\")\\r\\n```\\r\\n\\r\\n##### New syntax\\r\\n\\r\\n- include each class\\r\\n```python\\r\\nfrom steemconnect.client import Client\\r\\nfrom steemconnect.steemconnect import SteemConnect\\r\\nfrom steemconnect.operations import Vote\\r\\n```\\r\\n\\r\\n- Vote operation\\r\\n```python\\r\\nvote = Vote(voter:str, author:str, permlink:str, weight:int)\\r\\nresponse = SteemConnect(token=\\\"your_access_token\\\", data=vote.operation).run\\r\\nif response.status_code == 200:\\r\\n print(\\\"Your post upvoted\\\")\\r\\n```\\r\\n\\r\\n------------\\r\\n\\r\\n**If you want to learn more, how to use steem-connect python library [Check readme.md of library V0.7.3](https://github.com/hakancelik96/steemconnect/blob/59e3ff1d896131782e0b08da4dc7705de417d07d/README.md)**\\r\\n\\r\\n### Let's do a few examples with steem-connect python library!\\r\\n\\r\\n***In addition, you can even enhance the use of the steem-connect library with steem-python library***\\r\\n\\r\\n#### This example for upvote bot\\r\\n\\r\\n```python\\r\\nfrom steemconnect.steemconnect import SteemConnect\\r\\nfrom steemconnect.operations import Vote\\r\\n\\r\\nvote = Vote(voter=\\\"hakancelik\\\", author=\\\"enisshkurti\\\",\\r\\npermlink=\\\"make-it-a-september-to-remember\\\", weight=100)\\r\\nresponse = SteemConnect(token=\\\"xxxxxx\\\", data=vote.operation).run\\r\\nprint(response.text)\\r\\n````\\r\\n\\r\\n#### This example for follow operation\\r\\n\\r\\n```python\\r\\nfollow = Follow(follower=\\\"hakancelik\\\",following=\\\"enisshkurti\\\")\\r\\nresponse = SteemConnect(token=\\\"xxxxx\\\", data=follow.operation).run\\r\\nif response.status_code != 200:\\r\\n print(\\\"Your operation is success\\\")\\r\\n````\\r\\n\\r\\n#### This example for resteem operation with steem-python\\r\\n\\r\\n***When these codes run, resteem all the contents of the enisshkurti account.***\\r\\n\\r\\n```python\\r\\n# steem\\r\\nfrom steem import Steem\\r\\nfrom steem.blog import Blog\\r\\n\\r\\n# SteemConnect\\r\\nfrom steemconnect.steemconnect import SteemConnect\\r\\nfrom steemconnect.operations import Reblog\\r\\n\\r\\n\\r\\nSTEEM = Steem(nodes=['https://api.steemit.com'])\\r\\nfor blog in Blog(account_name = \\\"enisshkurti\\\").all():\\r\\n reblog = Reblog(account=\\\"hakancelik\\\", author=\\\"enisshkurti\\\", permlink=blog.permlink)\\r\\n response = SteemConnect(token=\\\"xxxxx\\\", data=reblog.operation).run\\r\\n if response.status_code != 200:\\r\\n print(\\\"Your operation is success\\\")\\r\\n\\r\\n```\\r\\n\\r\\n<center>**Thank you for reading**</center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "python-client-of-steemconnect-update-steem-connect",
"title": "Python Client of SteemConnect - Update: steem-connect"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T10:12:27",
"trx_id": "954e6c35eb5981ee3707204ae28e073c5be054f6",
"trx_in_block": 17,
"virtual_op": false
}hakancelikpublished a new post: canny-kenar-alglama2019/05/21 10:10:21
hakancelikpublished a new post: canny-kenar-alglama
2019/05/21 10:10:21
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/canny-kenar-alglama"> <img alt="" src="https://opencv-python-tutroals.readthedocs.io/en/latest/_images/math/435f8877ff8b95bab1e4f3bd435524ffee5c14e6.png"> </a> <a href="https://www.coogger.com/@hakancelik/canny-kenar-alglama">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["opencv", "canny", "coogger"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "[TOC]\r\n\r\n## Hedefler\r\n- Canny kenar alg\u0131lama kavram\u0131\r\n- Bunun i\u015flem i\u00e7in OpenCV fonksiyonlar\u0131ndan : `cv2.Canny()`\r\n\r\n## Teori\r\n\r\nCanny kenar alg\u0131lama algoritmas\u0131 pop\u00fcler olan bir kenar alg\u0131lama algoritmas\u0131d\u0131r. 1986 y\u0131l\u0131nda **John F. Canny** taraf\u0131ndan geli\u015ftirilmi\u015ftir. Bu \u00e7ok a\u015famal\u0131 bir algoritmad\u0131r ve biz hepsini \u00f6\u011frenece\u011fiz.\r\n\r\n### Kirlilik Azaltma\r\n\r\nKenar tespiti g\u00f6r\u00fcnt\u00fcdeki kirlili\u011fe kar\u015f\u0131 hassas oldu\u011fu i\u00e7in, ilk ad\u0131m g\u00f6r\u00fcnt\u00fcdeki kirlili\u011fi 5x5 Gaussian filter ile kald\u0131rmakt\u0131r. Bunu daha \u00f6nceki b\u00f6l\u00fcmlerde zaten g\u00f6rd\u00fck.\r\n\r\n### G\u00f6r\u00fcnt\u00fcn\u00fcn Yo\u011funluk Gradyan\u0131n\u0131 Bulma\r\nD\u00fczeltilmi\u015f g\u00f6r\u00fcnt\u00fc yatay y\u00f6nde  ve dikey y\u00f6nde  birinci t\u00fcrev elde etmek i\u00e7in yatay ve dikey y\u00f6nde bir Sobel \u00e7ekirde\u011fiyle filtrelenir. Bu iki resimden, her piksel i\u00e7in kenar e\u011fimini ve y\u00f6n\u00fcn\u00fc a\u015fa\u011f\u0131daki gibi bulabilirsiniz:\r\n\r\n<center></center>\r\n\r\nGradyan y\u00f6n\u00fc ( Gradient direction ) her zaman kenarlara diktir. Dikey, yatay ve iki diyagonal y\u00f6nde d\u00f6rt a\u00e7\u0131dan birine yuvarlan\u0131r.\r\n\r\n### Maksimum Olmayan Bast\u0131rma ( Non-maximum Suppression )\r\n\r\nE\u011fim b\u00fcy\u00fckl\u00fc\u011f\u00fc ve y\u00f6n\u00fcn\u00fc ald\u0131ktan sonra, kenar olu\u015fturmayan istenmeyen pikselleri kald\u0131rmak i\u00e7in g\u00f6r\u00fcnt\u00fcn\u00fcn tam bir taramas\u0131 yap\u0131l\u0131r. Bunun i\u00e7in, her pikselde, pikselin gradyan y\u00f6n\u00fcndeki kom\u015fusundan yerel bir maksimum olup olmad\u0131\u011f\u0131 kontrol edilir. A\u015fa\u011f\u0131daki g\u00f6r\u00fcnt\u00fcy\u00fc kontrol edin:\r\n\r\n<center></center>\r\n\r\nA noktas\u0131 kenar\u0131ndad\u0131r (dikey y\u00f6nde). Gradyan y\u00f6n\u00fc kenar\u0131n normalidir. B ve C noktas\u0131 gradyan y\u00f6n\u00fcndedir. B\u00f6ylece, nokta A, yerel maksimum olu\u015fturup olu\u015fturmad\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in B ve noktalar\u0131 ile kontrol edilir. E\u011fer \u00f6yleyse bir sonraki a\u015famada kabul edilir, aksi takdirde bask\u0131 yap\u0131l\u0131r (s\u0131f\u0131ra getirilir). K\u0131sacas\u0131 elde etti\u011finiz sonu\u00e7, \"ince kenarlar\" i\u00e7eren bir ikili g\u00f6r\u00fcnt\u00fcd\u00fcr.\r\n\r\n### Histerik E\u015fik ( Hysteresis Thresholding )\r\n\r\nBu a\u015famada t\u00fcm kenarlar\u0131n ger\u00e7ek bir kenar olup olmad\u0131\u011f\u0131 kontrol edilir. Bunun i\u00e7in, iki e\u015fik de\u011fer olan minVal ( minimum de\u011fer ) ve maxVal'ye ( maksimum de\u011fer ) ihtiyac\u0131m\u0131z var. Yo\u011funluk gradyant\u0131 maxVal ( maksimum de\u011fer ) 'dan daha fazla olan kenarlar\u0131n kesinlikle kenard\u0131r ve minVal ( minimum de\u011fer )'\u0131n alt\u0131ndaki kenarlar\u0131n ise ger\u00e7ek kenar olmayaca\u011f\u0131ndan emin olunur, bu i\u015flem bu \u015fekilde ge\u00e7ilir. Bu iki e\u015fik de\u011feri ( maksimum ve minimum ) ile s\u0131n\u0131fland\u0131r\u0131l\u0131r. Onlar ger\u00e7ek kenar piksellerine ba\u011fl\u0131 ise kenarlar\u0131n bir par\u00e7as\u0131 olarak kabul edilir ve di\u011fer leri yani kenar olmayanlar at\u0131l\u0131r. A\u015fa\u011f\u0131daki g\u00f6r\u00fcnt\u00fcye bak\u0131n.\r\n\r\n<center></center>\r\n\r\nA kenar\u0131, \"kesin kenar\" olarak kabul edilen maxVal'\u0131n \u00fcst\u00fcndedir. Kenar C, maxVal'\u0131n alt\u0131nda olmas\u0131na ra\u011fmen, kenar A'ya ba\u011fl\u0131d\u0131r, b\u00f6ylece ge\u00e7erli kenar olarak da d\u00fc\u015f\u00fcn\u00fcl\u00fcr ve bu tam e\u011fri elde edilir. Fakat Kenar B, minVal'\u0131n \u00fcst\u00fcnde ve Kenar C ile ayn\u0131 b\u00f6lgede olmas\u0131na ra\u011fmen, herhangi bir \"kesin-kenara\" ba\u011fl\u0131 de\u011fildir, b\u00f6ylece bu \u00e7\u0131kart\u0131l\u0131r. Dolay\u0131s\u0131yla do\u011fru sonuca ula\u015fmak i\u00e7in minVal ve maxVal de\u011ferlerini buna g\u00f6re se\u00e7memiz \u00e7ok \u00f6nemlidir.\r\n\r\nBu a\u015fama, kenarlar\u0131n uzun \u00e7izgiler oldu\u011fu varsay\u0131m\u0131yla k\u00fc\u00e7\u00fck piksel kirlili\u011fi \u00e7\u0131kart\u0131r.\r\n\r\nDolay\u0131s\u0131yla nihayetinde elde etti\u011fimiz, g\u00f6rselde g\u00fc\u00e7l\u00fc kenarlar kal\u0131r.\r\n\r\n## OpenCV'de Canny Kenar Alg\u0131lama\r\n\r\nOpencv yukar\u0131da i\u015fin teorik k\u0131sm\u0131nda bahsetti\u011fimiz olaylar\u0131 `cv2.Canny()` fonksiyonu ile yapar. \u015eimdi bu fonksiyonun nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 g\u00f6rece\u011fiz.\r\n\r\n- ilk parametremiz girdi arg\u00fcman\u0131 yani g\u00f6rselimizdir.\r\n- ikinci ve\r\n- \u00fc\u00e7\u00fcnc\u00fc parametreler s\u0131ras\u0131 ile minimum ve maksimum de\u011ferlerdir.\r\n- d\u00f6rd\u00fcnc\u00fc arg\u00fcman, **aperture_size**'dir. Resim gradyanlar\u0131 bulmak i\u00e7in kullan\u0131lan Sobel \u00e7ekirde\u011fi boyutudur. Varsay\u0131lan olarak 3't\u00fcr.\r\n- Son arg\u00fcman, gradyan b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc bulma denklemini belirten **L2gradient**'tir. Do\u011fruysa, yukar\u0131da belirtilen do\u011fru denklemi kullan\u0131r, aksi takdirde bu i\u015flevi kullan\u0131r:\r\n<center></center>\r\n\r\n```python\r\nimport cv2\r\nimport numpy as np\r\nfrom matplotlib import pyplot as plt\r\nimg = cv2.imread('messi5.jpg',0)\r\nedges = cv2.Canny(img,100,200)\r\nplt.subplot(121),plt.imshow(img,cmap = 'gray')\r\nplt.title('Original Image'), plt.xticks([]), plt.yticks([])\r\nplt.subplot(122),plt.imshow(edges,cmap = 'gray')\r\nplt.title('Edge Image'), plt.xticks([]), plt.yticks([])\r\nplt.show()\r\n```\r\n#### Sonu\u00e7;\r\n\r\n<center></center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | canny-kenar-alglama |
| title | Canny Kenar Algılama |
| Transaction Info | Block #33098848/Trx d91bb6b1dc3010ec4000eb41492f64a2d4b3b4b5 |
View Raw JSON Data
{
"block": 33098848,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/canny-kenar-alglama\">\n\n\n <img alt=\"\" src=\"https://opencv-python-tutroals.readthedocs.io/en/latest/_images/math/435f8877ff8b95bab1e4f3bd435524ffee5c14e6.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/canny-kenar-alglama\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"opencv\", \"canny\", \"coogger\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"[TOC]\\r\\n\\r\\n## Hedefler\\r\\n- Canny kenar alg\\u0131lama kavram\\u0131\\r\\n- Bunun i\\u015flem i\\u00e7in OpenCV fonksiyonlar\\u0131ndan : `cv2.Canny()`\\r\\n\\r\\n## Teori\\r\\n\\r\\nCanny kenar alg\\u0131lama algoritmas\\u0131 pop\\u00fcler olan bir kenar alg\\u0131lama algoritmas\\u0131d\\u0131r. 1986 y\\u0131l\\u0131nda **John F. Canny** taraf\\u0131ndan geli\\u015ftirilmi\\u015ftir. Bu \\u00e7ok a\\u015famal\\u0131 bir algoritmad\\u0131r ve biz hepsini \\u00f6\\u011frenece\\u011fiz.\\r\\n\\r\\n### Kirlilik Azaltma\\r\\n\\r\\nKenar tespiti g\\u00f6r\\u00fcnt\\u00fcdeki kirlili\\u011fe kar\\u015f\\u0131 hassas oldu\\u011fu i\\u00e7in, ilk ad\\u0131m g\\u00f6r\\u00fcnt\\u00fcdeki kirlili\\u011fi 5x5 Gaussian filter ile kald\\u0131rmakt\\u0131r. Bunu daha \\u00f6nceki b\\u00f6l\\u00fcmlerde zaten g\\u00f6rd\\u00fck.\\r\\n\\r\\n### G\\u00f6r\\u00fcnt\\u00fcn\\u00fcn Yo\\u011funluk Gradyan\\u0131n\\u0131 Bulma\\r\\nD\\u00fczeltilmi\\u015f g\\u00f6r\\u00fcnt\\u00fc yatay y\\u00f6nde  ve dikey y\\u00f6nde  birinci t\\u00fcrev elde etmek i\\u00e7in yatay ve dikey y\\u00f6nde bir Sobel \\u00e7ekirde\\u011fiyle filtrelenir. Bu iki resimden, her piksel i\\u00e7in kenar e\\u011fimini ve y\\u00f6n\\u00fcn\\u00fc a\\u015fa\\u011f\\u0131daki gibi bulabilirsiniz:\\r\\n\\r\\n<center></center>\\r\\n\\r\\nGradyan y\\u00f6n\\u00fc ( Gradient direction ) her zaman kenarlara diktir. Dikey, yatay ve iki diyagonal y\\u00f6nde d\\u00f6rt a\\u00e7\\u0131dan birine yuvarlan\\u0131r.\\r\\n\\r\\n### Maksimum Olmayan Bast\\u0131rma ( Non-maximum Suppression )\\r\\n\\r\\nE\\u011fim b\\u00fcy\\u00fckl\\u00fc\\u011f\\u00fc ve y\\u00f6n\\u00fcn\\u00fc ald\\u0131ktan sonra, kenar olu\\u015fturmayan istenmeyen pikselleri kald\\u0131rmak i\\u00e7in g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn tam bir taramas\\u0131 yap\\u0131l\\u0131r. Bunun i\\u00e7in, her pikselde, pikselin gradyan y\\u00f6n\\u00fcndeki kom\\u015fusundan yerel bir maksimum olup olmad\\u0131\\u011f\\u0131 kontrol edilir. A\\u015fa\\u011f\\u0131daki g\\u00f6r\\u00fcnt\\u00fcy\\u00fc kontrol edin:\\r\\n\\r\\n<center></center>\\r\\n\\r\\nA noktas\\u0131 kenar\\u0131ndad\\u0131r (dikey y\\u00f6nde). Gradyan y\\u00f6n\\u00fc kenar\\u0131n normalidir. B ve C noktas\\u0131 gradyan y\\u00f6n\\u00fcndedir. B\\u00f6ylece, nokta A, yerel maksimum olu\\u015fturup olu\\u015fturmad\\u0131\\u011f\\u0131n\\u0131 g\\u00f6rmek i\\u00e7in B ve noktalar\\u0131 ile kontrol edilir. E\\u011fer \\u00f6yleyse bir sonraki a\\u015famada kabul edilir, aksi takdirde bask\\u0131 yap\\u0131l\\u0131r (s\\u0131f\\u0131ra getirilir). K\\u0131sacas\\u0131 elde etti\\u011finiz sonu\\u00e7, \\\"ince kenarlar\\\" i\\u00e7eren bir ikili g\\u00f6r\\u00fcnt\\u00fcd\\u00fcr.\\r\\n\\r\\n### Histerik E\\u015fik ( Hysteresis Thresholding )\\r\\n\\r\\nBu a\\u015famada t\\u00fcm kenarlar\\u0131n ger\\u00e7ek bir kenar olup olmad\\u0131\\u011f\\u0131 kontrol edilir. Bunun i\\u00e7in, iki e\\u015fik de\\u011fer olan minVal ( minimum de\\u011fer ) ve maxVal'ye ( maksimum de\\u011fer ) ihtiyac\\u0131m\\u0131z var. Yo\\u011funluk gradyant\\u0131 maxVal ( maksimum de\\u011fer ) 'dan daha fazla olan kenarlar\\u0131n kesinlikle kenard\\u0131r ve minVal ( minimum de\\u011fer )'\\u0131n alt\\u0131ndaki kenarlar\\u0131n ise ger\\u00e7ek kenar olmayaca\\u011f\\u0131ndan emin olunur, bu i\\u015flem bu \\u015fekilde ge\\u00e7ilir. Bu iki e\\u015fik de\\u011feri ( maksimum ve minimum ) ile s\\u0131n\\u0131fland\\u0131r\\u0131l\\u0131r. Onlar ger\\u00e7ek kenar piksellerine ba\\u011fl\\u0131 ise kenarlar\\u0131n bir par\\u00e7as\\u0131 olarak kabul edilir ve di\\u011fer leri yani kenar olmayanlar at\\u0131l\\u0131r. A\\u015fa\\u011f\\u0131daki g\\u00f6r\\u00fcnt\\u00fcye bak\\u0131n.\\r\\n\\r\\n<center></center>\\r\\n\\r\\nA kenar\\u0131, \\\"kesin kenar\\\" olarak kabul edilen maxVal'\\u0131n \\u00fcst\\u00fcndedir. Kenar C, maxVal'\\u0131n alt\\u0131nda olmas\\u0131na ra\\u011fmen, kenar A'ya ba\\u011fl\\u0131d\\u0131r, b\\u00f6ylece ge\\u00e7erli kenar olarak da d\\u00fc\\u015f\\u00fcn\\u00fcl\\u00fcr ve bu tam e\\u011fri elde edilir. Fakat Kenar B, minVal'\\u0131n \\u00fcst\\u00fcnde ve Kenar C ile ayn\\u0131 b\\u00f6lgede olmas\\u0131na ra\\u011fmen, herhangi bir \\\"kesin-kenara\\\" ba\\u011fl\\u0131 de\\u011fildir, b\\u00f6ylece bu \\u00e7\\u0131kart\\u0131l\\u0131r. Dolay\\u0131s\\u0131yla do\\u011fru sonuca ula\\u015fmak i\\u00e7in minVal ve maxVal de\\u011ferlerini buna g\\u00f6re se\\u00e7memiz \\u00e7ok \\u00f6nemlidir.\\r\\n\\r\\nBu a\\u015fama, kenarlar\\u0131n uzun \\u00e7izgiler oldu\\u011fu varsay\\u0131m\\u0131yla k\\u00fc\\u00e7\\u00fck piksel kirlili\\u011fi \\u00e7\\u0131kart\\u0131r.\\r\\n\\r\\nDolay\\u0131s\\u0131yla nihayetinde elde etti\\u011fimiz, g\\u00f6rselde g\\u00fc\\u00e7l\\u00fc kenarlar kal\\u0131r.\\r\\n\\r\\n## OpenCV'de Canny Kenar Alg\\u0131lama\\r\\n\\r\\nOpencv yukar\\u0131da i\\u015fin teorik k\\u0131sm\\u0131nda bahsetti\\u011fimiz olaylar\\u0131 `cv2.Canny()` fonksiyonu ile yapar. \\u015eimdi bu fonksiyonun nas\\u0131l kullanaca\\u011f\\u0131m\\u0131z\\u0131 g\\u00f6rece\\u011fiz.\\r\\n\\r\\n- ilk parametremiz girdi arg\\u00fcman\\u0131 yani g\\u00f6rselimizdir.\\r\\n- ikinci ve\\r\\n- \\u00fc\\u00e7\\u00fcnc\\u00fc parametreler s\\u0131ras\\u0131 ile minimum ve maksimum de\\u011ferlerdir.\\r\\n- d\\u00f6rd\\u00fcnc\\u00fc arg\\u00fcman, **aperture_size**'dir. Resim gradyanlar\\u0131 bulmak i\\u00e7in kullan\\u0131lan Sobel \\u00e7ekirde\\u011fi boyutudur. Varsay\\u0131lan olarak 3't\\u00fcr.\\r\\n- Son arg\\u00fcman, gradyan b\\u00fcy\\u00fckl\\u00fc\\u011f\\u00fcn\\u00fc bulma denklemini belirten **L2gradient**'tir. Do\\u011fruysa, yukar\\u0131da belirtilen do\\u011fru denklemi kullan\\u0131r, aksi takdirde bu i\\u015flevi kullan\\u0131r:\\r\\n<center></center>\\r\\n\\r\\n```python\\r\\nimport cv2\\r\\nimport numpy as np\\r\\nfrom matplotlib import pyplot as plt\\r\\nimg = cv2.imread('messi5.jpg',0)\\r\\nedges = cv2.Canny(img,100,200)\\r\\nplt.subplot(121),plt.imshow(img,cmap = 'gray')\\r\\nplt.title('Original Image'), plt.xticks([]), plt.yticks([])\\r\\nplt.subplot(122),plt.imshow(edges,cmap = 'gray')\\r\\nplt.title('Edge Image'), plt.xticks([]), plt.yticks([])\\r\\nplt.show()\\r\\n```\\r\\n#### Sonu\\u00e7;\\r\\n\\r\\n<center></center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "canny-kenar-alglama",
"title": "Canny Kenar Algılama"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T10:10:21",
"trx_id": "d91bb6b1dc3010ec4000eb41492f64a2d4b3b4b5",
"trx_in_block": 0,
"virtual_op": false
}hakancelikpublished a new post: django-ile-site-haritas-olusturma2019/05/21 09:58:09
hakancelikpublished a new post: django-ile-site-haritas-olusturma
2019/05/21 09:58:09
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/django-ile-site-haritas-olusturma"> <img alt="coogger post" src="https://cdn.steemitimages.com/DQmV7q45hYaS1TugkYDmR4NtUuLXjMGDEnN2roxGGXJeYgs"> </a> <a href="https://www.coogger.com/@hakancelik/django-ile-site-haritas-olusturma">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["django", "sitemap", "coogger"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "[TOC]\r\n\r\n### Site Haritas\u0131 Nedir?\r\n\r\nSite haritalar\u0131 google gibi arama motorlar\u0131n\u0131n sizin sitenizi'deki i\u00e7eriklerin botlar\u0131 ile daha h\u0131zl\u0131 ve pratik bir \u015fekilde tarama yap\u0131p indexlemesini sa\u011flayan .xml uzant\u0131l\u0131 bir dosyad\u0131r seo yani arama motoru optimizasyonu i\u00e7in olduk\u00e7a \u00f6nemli olup neredeyse her sitede bulunur, \u00f6rne\u011fin coogger'\u0131n i\u00e7erikler i\u00e7in kulland\u0131\u011f\u0131 [/sitemap/content.xml/](https://www.coogger.com/sitemap/content.xml/) adresine t\u0131klayarak inceleyebilirsiniz.\r\n\r\n## Hadi Projemiz i\u00e7in Site Haritas\u0131 Yapal\u0131m\r\n\r\n\u00d6nce projenizin **settings.py** b\u00f6l\u00fcm\u00fcn\u00fc a\u00e7\u0131n ve [INSTALLED_APP](https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-INSTALLED_APPS) k\u0131sm\u0131na django'da bulunan sitemap uygulamas\u0131n\u0131n yolunu yazal\u0131m; `django.contrib.sitemaps`\r\n\r\n[sites framework](https://docs.djangoproject.com/en/1.11/ref/contrib/sites/#module-django.contrib.sites)'\u00fcn y\u00fckl\u00fc oldu\u011fundan emin olun.\r\n\r\nDaha sonra projenizin **myapp/templates** dizini i\u00e7erisine **sitemap.xml** olarak bir dosya a\u00e7al\u0131m ve i\u00e7ine \u015fu sat\u0131rlar\u0131 yazal\u0131m;\r\n\r\n```html\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<urlset\r\n xmlns=\"https://www.sitemaps.org/schemas/sitemap/0.9\">\r\n\r\n{% spaceless %}\r\n{% for url in urlset %}\r\n <url>\r\n <loc>{{ url.location }}</loc>\r\n {% if url.lastmod %}<lastmod>{{ url.lastmod|date:\"Y-m-d\" }}</lastmod>{% endif %}\r\n {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}\r\n {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}\r\n </url>\r\n{% endfor %}\r\n{% endspaceless %}\r\n</urlset>\r\n```\r\n\r\nbu dosya bizim sitemap temam\u0131z ( template ) d\u0131r.\r\n\r\ne\u011fer siteniz bir haber sitesi ise **sitemap** teman\u0131z a\u015fa\u011f\u0131daki gibi olmal\u0131d\u0131r.\r\n\r\n```html\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<urlset\r\n xmlns=\"https://www.sitemaps.org/schemas/sitemap/0.9\"\r\n xmlns:news=\"http://www.google.com/schemas/sitemap-news/0.9\">\r\n{% spaceless %}\r\n{% for url in urlset %}\r\n <url>\r\n <loc>{{ url.location }}</loc>\r\n {% if url.lastmod %}<lastmod>{{ url.lastmod|date:\"Y-m-d\" }}</lastmod>{% endif %}\r\n {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}\r\n {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}\r\n <news:news>\r\n {% if url.item.time %}<news:publication_date>{{ url.item.time|date:\"Y-m-d\" }}</news:publication_date>{% endif %}\r\n {% if url.item.tag %}<news:keywords>{{ url.item.tag }}</news:keywords>{% endif %}\r\n </news:news>\r\n </url>\r\n{% endfor %}\r\n{% endspaceless %}\r\n</urlset>\r\n```\r\n\r\n\u015eimdi **views.py** ye girelim, a\u00e7\u0131klamalar\u0131 kodlar\u0131n i\u00e7ine yazd\u0131m.\r\n\r\n```python\r\n# views.py dosyan\u0131z\u0131n i\u00e7ine\r\nfrom models import Blog\r\n# model dosyam\u0131zdan Blog adl\u0131 s\u0131n\u0131f\u0131 \u00e7a\u011f\u0131r\u0131yoruz \r\n# Blog model s\u0131n\u0131f\u0131n\u0131 \u00f6rnek i\u00e7in veriyorum siz i\u00e7eriklerinizi hangi model s\u0131n\u0131f\u0131nda tutuyorsan\u0131z yan\u0131 \r\n# hangi model s\u0131n\u0131f\u0131 i\u00e7in site haritas\u0131 yapacaksan\u0131z onu \u00e7a\u011f\u0131r\u0131n \r\nfrom django.contrib.sitemaps import Sitemap\r\n# django nun sitemap s\u0131n\u0131f\u0131n\u0131 \u00e7a\u011f\u0131r\u0131yoruz\r\nclass BlogSitemap(Sitemap): \r\n# s\u0131n\u0131f ismimizi verdik ve \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z Sitemap s\u0131n\u0131f\u0131ndan miras al\u0131yoruz\r\n changefreq = \"daily\" # bu de\u011fi\u015fkenimiz site haritas\u0131nda yazacak olan ne \r\n # s\u0131kl\u0131kla tarayaca\u011f\u0131 bilgisini yazar { daily always weekly }\r\n # gibi se\u00e7enekler vard\u0131r ara\u015ft\u0131r\u0131n\r\n priority = 1.0 # priority de\u011fi\u015fkenimiz tarama \u00f6nceli\u011fini arama motorlar\u0131na belirtir \r\n # 0.1 ,0.6 veya 1.0 gibi de\u011ferler verilebilir size kalm\u0131\u015f\r\n def items(self): # items fonksiyonu Blog nesnesindeki her \u00f6\u011feyi belirtir yani \r\n # item.url , veya item.time diyerel modelinize ait de\u011fi\u015fkenleri alabilirsiniz\r\n return Blog.objects.all()\r\n def lastmod(self,obj): # lastmod fonksiyonu i\u00e7eri\u011finizin en son de\u011fi\u015ftirilme tarihini g\u00f6sterir.\r\n return Blog.objects.filter(user = obj.user)[0].lastmod \r\n # benim modelimde en son de\u011fi\u015fme tarihi bu \u015fekilde kay\u0131tl\u0131 \r\n # oldu\u011fu i\u00e7in ben bu \u015fekilde ald\u0131m , kullan\u0131c\u0131n\u0131n yazm\u0131\u015f oldu\u011fu en \r\n # son i\u00e7erik tarihini al\u0131yorum buda en son g\u00fcncelleme zaman\u0131n\u0131 vermi\u015f oluyor ve bu bilgiyi return ile g\u00f6nderiyorum\r\n def location(self,obj): # location fonksiyonu i\u00e7erik adreslerinin tutuldu\u011fu yerdir\r\n return obj.url # items fonksiyonunda g\u00f6nderdi\u011fimiz model nesnemizin \u00f6\u011felerine eri\u015fmek i\u00e7in\r\n # (self,obj) \u015fu parametreleri kullan\u0131p obj de\u011fi\u015fkenindeki \r\n # ( bu bizim \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z model oluyor ) \u00f6gelere eri\u015febiliyoruz bende i\u00e7erik adreseri \r\n # Blog modelimde url de\u011fi\u015fkeninde oldu\u011fu i\u00e7in bu \u015fekilde \u00e7a\u011f\u0131rd\u0131m.\r\n```\r\n\r\nviews.py yi de ayarlad\u0131\u011f\u0131m\u0131za g\u00f6re urls.py b\u00f6l\u00fcm\u00fcne girip son ayar\u0131m\u0131z\u0131 yap\u0131yoruz.\r\n\r\na\u00e7\u0131klamalar yine kodlar da mevcut:\r\n\r\n```python\r\nfrom django.contrib.sitemaps.views import sitemap \r\n# urls.py i\u00e7in django sitemap fonksiyonunu ekledik.\r\nfrom views import BlogSitemap # \u015feklinde views.py i\u00e7indeki site harita s\u0131n\u0131f\u0131m\u0131 \u00e7a\u011f\u0131rd\u0131m\r\n# sizlerde import i\u015flemleri urls.py ve views.py dosyalar\u0131n\u0131n konumuna g\u00f6re de\u011fi\u015febilir\r\n# bunu import etme kurallar\u0131n\u0131 ara\u015ft\u0131r\u0131p s\u0131k\u0131nt\u0131s\u0131z bir \u015fekilde dahil edebilirsiniz\r\nsitemaps = { \r\n \"blog\":BlogSitemap(),\r\n}\r\n\"\"\"\r\nsitemaps ad\u0131nda bir s\u00f6zl\u00fck (dict) tipinde bir de\u011fi\u015fken a\u00e7t\u0131k ve\r\naz \u00f6nce views.py de ayarlad\u0131\u011f\u0131m\u0131z blog site harita s\u0131n\u0131f\u0131n\u0131 \"blog\" \u015feklinde s\u00f6zl\u00fc\u011f\u00fcm\u00fcze g\u00f6nderdik \r\ne\u011fer birden fazla site haritas\u0131 ekleyecekseniz yine views.py de az \u00f6nce yapt\u0131\u011f\u0131m\u0131z i\u015flemleri ba\u015fka eklemek istedi\u011finiz model s\u0131n\u0131f\u0131n\u0131z\u0131 dahil ederek ayarlay\u0131p o s\u0131n\u0131f\u0131 urls.py i\u00e7ine \u00e7a\u011f\u0131rarak ( import ederek ) sitemaps s\u00f6zl\u00fc\u011f\u00fcne eklemeniz yetecektir. \r\n \"\"\"\r\nurlpatterns = [\r\n url(r'^$', home,name = \"home\"),\r\n url(r'^sitemap\\.xml$', sitemap, {'sitemaps': sitemaps}),\r\n # son olarak burada sitemap.xml adres k\u0131sm\u0131n\u0131 olu\u015fturduk ve django nun sitemap \r\n # fonksiyonunu koyduk ikinci paramatere olarak\r\n # daha sonra {'sitemaps': sitemaps} \u015fu s\u00f6zl\u00fck ile de yukar\u0131da olu\u015fturdu\u011fumuz sitemaps\r\n # olu\u015fturdu\u011fum sitemap s\u0131n\u0131flar\u0131n\u0131 g\u00f6nderdim ve i\u015flem bitti hepsi bu kadar\r\n]\r\n```\r\n\r\n\u015fimdi projenizden /sitemap.xml \u015feklinde ki adrese giderek site haritan\u0131z\u0131 g\u00f6r\u00fcnt\u00fcleyebilirsiniz.\r\n\r\n\r\n## Not\r\nSeo i\u00e7in **robots.txt** dosyan\u0131za site haritalar\u0131n\u0131n adreslerini koymay\u0131 unutmay\u0131n\r\n\r\n#### Kaynak\r\n- [https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/](https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/)"}} |
| parent author | |
| parent permlink | coogger |
| permlink | django-ile-site-haritas-olusturma |
| title | Django Ile Site Haritası Oluşturma |
| Transaction Info | Block #33098604/Trx 74eed72563295ae67b644e6a72bd971d90572bf2 |
View Raw JSON Data
{
"block": 33098604,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-ile-site-haritas-olusturma\">\n\n\n <img alt=\"coogger post\" src=\"https://cdn.steemitimages.com/DQmV7q45hYaS1TugkYDmR4NtUuLXjMGDEnN2roxGGXJeYgs\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-ile-site-haritas-olusturma\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"django\", \"sitemap\", \"coogger\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"[TOC]\\r\\n\\r\\n### Site Haritas\\u0131 Nedir?\\r\\n\\r\\nSite haritalar\\u0131 google gibi arama motorlar\\u0131n\\u0131n sizin sitenizi'deki i\\u00e7eriklerin botlar\\u0131 ile daha h\\u0131zl\\u0131 ve pratik bir \\u015fekilde tarama yap\\u0131p indexlemesini sa\\u011flayan .xml uzant\\u0131l\\u0131 bir dosyad\\u0131r seo yani arama motoru optimizasyonu i\\u00e7in olduk\\u00e7a \\u00f6nemli olup neredeyse her sitede bulunur, \\u00f6rne\\u011fin coogger'\\u0131n i\\u00e7erikler i\\u00e7in kulland\\u0131\\u011f\\u0131 [/sitemap/content.xml/](https://www.coogger.com/sitemap/content.xml/) adresine t\\u0131klayarak inceleyebilirsiniz.\\r\\n\\r\\n## Hadi Projemiz i\\u00e7in Site Haritas\\u0131 Yapal\\u0131m\\r\\n\\r\\n\\u00d6nce projenizin **settings.py** b\\u00f6l\\u00fcm\\u00fcn\\u00fc a\\u00e7\\u0131n ve [INSTALLED_APP](https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-INSTALLED_APPS) k\\u0131sm\\u0131na django'da bulunan sitemap uygulamas\\u0131n\\u0131n yolunu yazal\\u0131m; `django.contrib.sitemaps`\\r\\n\\r\\n[sites framework](https://docs.djangoproject.com/en/1.11/ref/contrib/sites/#module-django.contrib.sites)'\\u00fcn y\\u00fckl\\u00fc oldu\\u011fundan emin olun.\\r\\n\\r\\nDaha sonra projenizin **myapp/templates** dizini i\\u00e7erisine **sitemap.xml** olarak bir dosya a\\u00e7al\\u0131m ve i\\u00e7ine \\u015fu sat\\u0131rlar\\u0131 yazal\\u0131m;\\r\\n\\r\\n```html\\r\\n<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\r\\n<urlset\\r\\n xmlns=\\\"https://www.sitemaps.org/schemas/sitemap/0.9\\\">\\r\\n\\r\\n{% spaceless %}\\r\\n{% for url in urlset %}\\r\\n <url>\\r\\n <loc>{{ url.location }}</loc>\\r\\n {% if url.lastmod %}<lastmod>{{ url.lastmod|date:\\\"Y-m-d\\\" }}</lastmod>{% endif %}\\r\\n {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}\\r\\n {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}\\r\\n </url>\\r\\n{% endfor %}\\r\\n{% endspaceless %}\\r\\n</urlset>\\r\\n```\\r\\n\\r\\nbu dosya bizim sitemap temam\\u0131z ( template ) d\\u0131r.\\r\\n\\r\\ne\\u011fer siteniz bir haber sitesi ise **sitemap** teman\\u0131z a\\u015fa\\u011f\\u0131daki gibi olmal\\u0131d\\u0131r.\\r\\n\\r\\n```html\\r\\n<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\r\\n<urlset\\r\\n xmlns=\\\"https://www.sitemaps.org/schemas/sitemap/0.9\\\"\\r\\n xmlns:news=\\\"http://www.google.com/schemas/sitemap-news/0.9\\\">\\r\\n{% spaceless %}\\r\\n{% for url in urlset %}\\r\\n <url>\\r\\n <loc>{{ url.location }}</loc>\\r\\n {% if url.lastmod %}<lastmod>{{ url.lastmod|date:\\\"Y-m-d\\\" }}</lastmod>{% endif %}\\r\\n {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}\\r\\n {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}\\r\\n <news:news>\\r\\n {% if url.item.time %}<news:publication_date>{{ url.item.time|date:\\\"Y-m-d\\\" }}</news:publication_date>{% endif %}\\r\\n {% if url.item.tag %}<news:keywords>{{ url.item.tag }}</news:keywords>{% endif %}\\r\\n </news:news>\\r\\n </url>\\r\\n{% endfor %}\\r\\n{% endspaceless %}\\r\\n</urlset>\\r\\n```\\r\\n\\r\\n\\u015eimdi **views.py** ye girelim, a\\u00e7\\u0131klamalar\\u0131 kodlar\\u0131n i\\u00e7ine yazd\\u0131m.\\r\\n\\r\\n```python\\r\\n# views.py dosyan\\u0131z\\u0131n i\\u00e7ine\\r\\nfrom models import Blog\\r\\n# model dosyam\\u0131zdan Blog adl\\u0131 s\\u0131n\\u0131f\\u0131 \\u00e7a\\u011f\\u0131r\\u0131yoruz \\r\\n# Blog model s\\u0131n\\u0131f\\u0131n\\u0131 \\u00f6rnek i\\u00e7in veriyorum siz i\\u00e7eriklerinizi hangi model s\\u0131n\\u0131f\\u0131nda tutuyorsan\\u0131z yan\\u0131 \\r\\n# hangi model s\\u0131n\\u0131f\\u0131 i\\u00e7in site haritas\\u0131 yapacaksan\\u0131z onu \\u00e7a\\u011f\\u0131r\\u0131n \\r\\nfrom django.contrib.sitemaps import Sitemap\\r\\n# django nun sitemap s\\u0131n\\u0131f\\u0131n\\u0131 \\u00e7a\\u011f\\u0131r\\u0131yoruz\\r\\nclass BlogSitemap(Sitemap): \\r\\n# s\\u0131n\\u0131f ismimizi verdik ve \\u00e7a\\u011f\\u0131rd\\u0131\\u011f\\u0131m\\u0131z Sitemap s\\u0131n\\u0131f\\u0131ndan miras al\\u0131yoruz\\r\\n changefreq = \\\"daily\\\" # bu de\\u011fi\\u015fkenimiz site haritas\\u0131nda yazacak olan ne \\r\\n # s\\u0131kl\\u0131kla tarayaca\\u011f\\u0131 bilgisini yazar { daily always weekly }\\r\\n # gibi se\\u00e7enekler vard\\u0131r ara\\u015ft\\u0131r\\u0131n\\r\\n priority = 1.0 # priority de\\u011fi\\u015fkenimiz tarama \\u00f6nceli\\u011fini arama motorlar\\u0131na belirtir \\r\\n # 0.1 ,0.6 veya 1.0 gibi de\\u011ferler verilebilir size kalm\\u0131\\u015f\\r\\n def items(self): # items fonksiyonu Blog nesnesindeki her \\u00f6\\u011feyi belirtir yani \\r\\n # item.url , veya item.time diyerel modelinize ait de\\u011fi\\u015fkenleri alabilirsiniz\\r\\n return Blog.objects.all()\\r\\n def lastmod(self,obj): # lastmod fonksiyonu i\\u00e7eri\\u011finizin en son de\\u011fi\\u015ftirilme tarihini g\\u00f6sterir.\\r\\n return Blog.objects.filter(user = obj.user)[0].lastmod \\r\\n # benim modelimde en son de\\u011fi\\u015fme tarihi bu \\u015fekilde kay\\u0131tl\\u0131 \\r\\n # oldu\\u011fu i\\u00e7in ben bu \\u015fekilde ald\\u0131m , kullan\\u0131c\\u0131n\\u0131n yazm\\u0131\\u015f oldu\\u011fu en \\r\\n # son i\\u00e7erik tarihini al\\u0131yorum buda en son g\\u00fcncelleme zaman\\u0131n\\u0131 vermi\\u015f oluyor ve bu bilgiyi return ile g\\u00f6nderiyorum\\r\\n def location(self,obj): # location fonksiyonu i\\u00e7erik adreslerinin tutuldu\\u011fu yerdir\\r\\n return obj.url # items fonksiyonunda g\\u00f6nderdi\\u011fimiz model nesnemizin \\u00f6\\u011felerine eri\\u015fmek i\\u00e7in\\r\\n # (self,obj) \\u015fu parametreleri kullan\\u0131p obj de\\u011fi\\u015fkenindeki \\r\\n # ( bu bizim \\u00e7a\\u011f\\u0131rd\\u0131\\u011f\\u0131m\\u0131z model oluyor ) \\u00f6gelere eri\\u015febiliyoruz bende i\\u00e7erik adreseri \\r\\n # Blog modelimde url de\\u011fi\\u015fkeninde oldu\\u011fu i\\u00e7in bu \\u015fekilde \\u00e7a\\u011f\\u0131rd\\u0131m.\\r\\n```\\r\\n\\r\\nviews.py yi de ayarlad\\u0131\\u011f\\u0131m\\u0131za g\\u00f6re urls.py b\\u00f6l\\u00fcm\\u00fcne girip son ayar\\u0131m\\u0131z\\u0131 yap\\u0131yoruz.\\r\\n\\r\\na\\u00e7\\u0131klamalar yine kodlar da mevcut:\\r\\n\\r\\n```python\\r\\nfrom django.contrib.sitemaps.views import sitemap \\r\\n# urls.py i\\u00e7in django sitemap fonksiyonunu ekledik.\\r\\nfrom views import BlogSitemap # \\u015feklinde views.py i\\u00e7indeki site harita s\\u0131n\\u0131f\\u0131m\\u0131 \\u00e7a\\u011f\\u0131rd\\u0131m\\r\\n# sizlerde import i\\u015flemleri urls.py ve views.py dosyalar\\u0131n\\u0131n konumuna g\\u00f6re de\\u011fi\\u015febilir\\r\\n# bunu import etme kurallar\\u0131n\\u0131 ara\\u015ft\\u0131r\\u0131p s\\u0131k\\u0131nt\\u0131s\\u0131z bir \\u015fekilde dahil edebilirsiniz\\r\\nsitemaps = { \\r\\n \\\"blog\\\":BlogSitemap(),\\r\\n}\\r\\n\\\"\\\"\\\"\\r\\nsitemaps ad\\u0131nda bir s\\u00f6zl\\u00fck (dict) tipinde bir de\\u011fi\\u015fken a\\u00e7t\\u0131k ve\\r\\naz \\u00f6nce views.py de ayarlad\\u0131\\u011f\\u0131m\\u0131z blog site harita s\\u0131n\\u0131f\\u0131n\\u0131 \\\"blog\\\" \\u015feklinde s\\u00f6zl\\u00fc\\u011f\\u00fcm\\u00fcze g\\u00f6nderdik \\r\\ne\\u011fer birden fazla site haritas\\u0131 ekleyecekseniz yine views.py de az \\u00f6nce yapt\\u0131\\u011f\\u0131m\\u0131z i\\u015flemleri ba\\u015fka eklemek istedi\\u011finiz model s\\u0131n\\u0131f\\u0131n\\u0131z\\u0131 dahil ederek ayarlay\\u0131p o s\\u0131n\\u0131f\\u0131 urls.py i\\u00e7ine \\u00e7a\\u011f\\u0131rarak ( import ederek ) sitemaps s\\u00f6zl\\u00fc\\u011f\\u00fcne eklemeniz yetecektir. \\r\\n \\\"\\\"\\\"\\r\\nurlpatterns = [\\r\\n url(r'^$', home,name = \\\"home\\\"),\\r\\n url(r'^sitemap\\\\.xml$', sitemap, {'sitemaps': sitemaps}),\\r\\n # son olarak burada sitemap.xml adres k\\u0131sm\\u0131n\\u0131 olu\\u015fturduk ve django nun sitemap \\r\\n # fonksiyonunu koyduk ikinci paramatere olarak\\r\\n # daha sonra {'sitemaps': sitemaps} \\u015fu s\\u00f6zl\\u00fck ile de yukar\\u0131da olu\\u015fturdu\\u011fumuz sitemaps\\r\\n # olu\\u015fturdu\\u011fum sitemap s\\u0131n\\u0131flar\\u0131n\\u0131 g\\u00f6nderdim ve i\\u015flem bitti hepsi bu kadar\\r\\n]\\r\\n```\\r\\n\\r\\n\\u015fimdi projenizden /sitemap.xml \\u015feklinde ki adrese giderek site haritan\\u0131z\\u0131 g\\u00f6r\\u00fcnt\\u00fcleyebilirsiniz.\\r\\n\\r\\n\\r\\n## Not\\r\\nSeo i\\u00e7in **robots.txt** dosyan\\u0131za site haritalar\\u0131n\\u0131n adreslerini koymay\\u0131 unutmay\\u0131n\\r\\n\\r\\n#### Kaynak\\r\\n- [https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/](https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/)\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "django-ile-site-haritas-olusturma",
"title": "Django Ile Site Haritası Oluşturma"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:58:09",
"trx_id": "74eed72563295ae67b644e6a72bd971d90572bf2",
"trx_in_block": 20,
"virtual_op": false
}2019/05/21 09:51:57
2019/05/21 09:51:57
| author | hakancelik |
| permlink | django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr |
| voter | hozn4ukhlytriwc |
| weight | 1500 (15.00%) |
| Transaction Info | Block #33098480/Trx cbdb8bbfeb8be00abed7cce6c7c9bc5d4a1ecc11 |
View Raw JSON Data
{
"block": 33098480,
"op": [
"vote",
{
"author": "hakancelik",
"permlink": "django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr",
"voter": "hozn4ukhlytriwc",
"weight": 1500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:51:57",
"trx_id": "cbdb8bbfeb8be00abed7cce6c7c9bc5d4a1ecc11",
"trx_in_block": 32,
"virtual_op": false
}hakancelikpublished a new post: goruntu-piramitleri2019/05/21 09:47:54
hakancelikpublished a new post: goruntu-piramitleri
2019/05/21 09:47:54
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/goruntu-piramitleri"> <img alt="görüntü-piramitleri" src="https://www.coogger.com/media/images/opencv_messi.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/goruntu-piramitleri">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["image", "opencv", "coogger", "piramitler", "pyramids"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "> Image Pyramids\r\n\r\n[TOC]\r\n\r\n## Hedef\r\n\r\nBu b\u00f6l\u00fcmde,\r\n- G\u00f6r\u00fcnt\u00fc piramitlerini \u00f6\u011frenece\u011fiz\r\n- Biz g\u00f6r\u00fcnt\u00fc piramitleri yeni bir meyve olu\u015fturmak i\u00e7in kullanaca\u011f\u0131z, \"Orapple\u201d\r\n- ve bu fonksiyonlar\u0131 g\u00f6rece\u011fiz: `cv2.pyrUp()`, `cv2.pyridge()`\r\n\r\n## Teori\r\n\r\nNormalde, sabit boyutlu bir g\u00f6r\u00fcnt\u00fc ile \u00e7al\u0131\u015f\u0131rd\u0131k. Ama baz\u0131 durumlarda, ayn\u0131 g\u00f6r\u00fcnt\u00fcn\u00fcn farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fck g\u00f6r\u00fcnt\u00fcleri ile \u00e7al\u0131\u015fmak gerekir. \u00d6rne\u011fin, bir g\u00f6r\u00fcnt\u00fcde bir \u015fey ararken y\u00fcz gibi, nesnenin g\u00f6r\u00fcnt\u00fcde ne boyutta olabilece\u011fine emin olamay\u0131z. Bu durumda farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fck ve t\u00fcm g\u00f6r\u00fcnt\u00fclerde nesne aramak i\u00e7in g\u00f6r\u00fcnt\u00fc k\u00fcmesi olu\u015fturmak gerekir. Farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011fe sahip bu g\u00f6r\u00fcnt\u00fc k\u00fcmesine g\u00f6r\u00fcnt\u00fc piramitleri denir ( \u00e7\u00fcnk\u00fc en alttaki en b\u00fcy\u00fck g\u00f6r\u00fcnt\u00fc ve en \u00fcstteki en k\u00fc\u00e7\u00fck g\u00f6r\u00fcnt\u00fc ile y\u0131\u011f\u0131nda tutulduklar\u0131 zaman piramitlere benzer. ).\r\n\r\n**\u0130ki \u00e7e\u015fit g\u00f6r\u00fcnt\u00fc piramidi vard\u0131r**\r\n- **Gaussian Pyramid** ( Gauss piramidi )\r\n- **Laplacian Pyramids** ( Laplacian piramitleri )\r\n\r\nGaussian piramidi y\u00fcksek d\u00fczey ( d\u00fc\u015f\u00fck \u00e7\u00f6z\u00fcn\u00fcrl\u00fck ) d\u00fc\u015f\u00fck d\u00fczey (y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fck) resim ( g\u00f6r\u00fcnt\u00fc )deki ard\u0131\u015f\u0131k sat\u0131r ve s\u00fctunlar\u0131 kald\u0131rarak olu\u015fturulur. Daha sonra daha y\u00fcksek d\u00fczeydeki her piksel Gauss a\u011f\u0131rl\u0131klar\u0131 ile temel d\u00fczeyde 5 pikselden gelen katk\u0131yla olu\u015fur.\r\n\r\nBunu yaparak bir , **M x X** g\u00f6r\u00fcnt\u00fcs\u00fc **M/2 x N/2** g\u00f6r\u00fcnt\u00fcs\u00fc olur.\r\n\r\nYani alan orijinal alan\u0131n d\u00f6rtte birine d\u00fc\u015fer. Buna oktav ( Octave ) denir. Biz piramidin daha alt\u0131na giderek ( yani \u00e7\u00f6z\u00fcn\u00fcrl\u00fck azal\u0131r ) ayn\u0131 desen devam eder. Benzer \u015fekilde geni\u015flerken, alan her d\u00fczeyde 4 kez olur. Gauss piramitlerini `cv2.pyrDown()` ve `cv2.pyrUp()` functions fonksiyonlar\u0131n\u0131 kullanarak bulabiliriz.\r\n\r\n```python\r\nimg = cv2.imread('messi5.jpg')\r\nlower_reso = cv2.pyrDown(higher_reso)\r\n```\r\nA\u015fa\u011f\u0131da bir g\u00f6r\u00fcnt\u00fc piramidinde 4 seviyedir.\r\n<center></center>\r\n\u015eimdi g\u00f6r\u00fcnt\u00fc piramitlerinin a\u015fag\u0131s\u0131na inebiliriz `cv2.pyrUp()` fonksiyonu ile.\r\n`higher_reso2 = cv2.pyrUp(lower_reso)`\r\n\r\nUnutmay\u0131n, `higher_reso2` `higher_reso` e\u015fit de\u011fildir, \u00e7\u00fcnk\u00fc \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc d\u00fc\u015f\u00fcrd\u00fckten sonra bilgiyi kaybedersin. A\u015fa\u011f\u0131da g\u00f6r\u00fcnt\u00fc \u00f6nceki durumda en k\u00fc\u00e7\u00fck g\u00f6r\u00fcnt\u00fcden olu\u015fturulan piramit 3 d\u00fczey a\u015fa\u011f\u0131d\u0131r. Orijinal g\u00f6r\u00fcnt\u00fc ile kar\u015f\u0131la\u015ft\u0131r\u0131n.\r\n\r\n<center></center>\r\nLaplacian piramitleri Gauss piramitlerinden olu\u015fur. Bunun i\u00e7in \u00f6zel bir i\u015flev yoktur. Laplacian Piramidi g\u00f6r\u00fcnt\u00fcleri sadece kenar g\u00f6r\u00fcnt\u00fcleri gibidir. Elementlerin \u00e7o\u011fu s\u0131f\u0131rd\u0131r. G\u00f6r\u00fcnt\u00fc s\u0131k\u0131\u015ft\u0131rmas\u0131nda kullan\u0131l\u0131rlar. Laplacian piramidinde bir seviye Gauss piramidindeki bu seviye ile Gauss piramidindeki \u00fcst seviyesinin geni\u015fletilmi\u015f versiyonu aras\u0131ndaki fark ile olu\u015fur. Bir Laplacian d\u00fczeyi \u00fc\u00e7 d\u00fczeyleri a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcn\u00fcr. (kontrast i\u00e7eri\u011fini geli\u015ftirmek i\u00e7in ayarlan\u0131r gibi g\u00f6r\u00fcnecektir):\r\n\r\n<center></center>\r\n\r\n## Piramitleri Kullanarak G\u00f6r\u00fcnt\u00fc Kar\u0131\u015ft\u0131rma\r\n\r\nG\u00f6r\u00fcnt\u00fc kar\u015f\u0131la\u015ft\u0131rma piramitlerin bir uygulamas\u0131d\u0131r. \u00d6rne\u011fin, g\u00f6r\u00fcnt\u00fc dikiminde iki g\u00f6r\u00fcnt\u00fcy\u00fc bir araya getirmeniz gerekir, ancak g\u00f6r\u00fcnt\u00fcler aras\u0131ndaki kesintiler nedeniyle iyi g\u00f6r\u00fcnmeyebilir. Bu durumda, piramitler ile kar\u0131\u015ft\u0131rma g\u00f6r\u00fcnt\u00fclerde \u00e7ok fazla veri b\u0131rakmadan sorunsuz kar\u0131\u015ft\u0131rma sa\u011flar. Bunun klasik bir \u00f6rne\u011fi iki meyvenin, portakal ve elma kar\u0131\u015f\u0131m\u0131d\u0131r. \u015eimdi ne s\u00f6yledi\u011fimi anlamak i\u00e7in sonuca bak\u0131n.\r\n<center></center>\r\nL\u00fctfen ek kaynaklar\u0131 ve referanslar\u0131 kontrol edin ,bu g\u00f6r\u00fcnt\u00fc kar\u0131\u015ft\u0131rma, Laplacian Piramitleri vb tam diagramatik ayr\u0131nt\u0131lar\u0131 vard\u0131r Basit\u00e7e \u015f\u00f6yle yap\u0131l\u0131r.\r\n\r\n- Elma ve portakal olan iki resim y\u00fcklenir.\r\n- Elma ve portakal i\u00e7in Gauss piramitleri bulunur.\r\n- Gauss piramitlerinden Laplacian piramitlerini bulunur.\r\n- \u015eimdi Laplacian piramitlerinin her kademesinde elma ve turuncu sa\u011f yar\u0131s\u0131 sol yar\u0131s\u0131 kat\u0131l\u0131r.\r\n- Sonunda bu ortak g\u00f6r\u00fcnt\u00fc piramitlerinden, orijinal g\u00f6r\u00fcnt\u00fcy\u00fc yeniden olu\u015fturun.\r\n\r\nA\u015fa\u011f\u0131da tam kodu var. (Basitlik u\u011fruna, her ad\u0131m ayr\u0131 ayr\u0131 yap\u0131l\u0131r, daha fazla bellek alabilir. E\u011fer isterseniz optimize edebilirsiniz).\r\n\r\n```python\r\nimport cv2\r\nimport numpy as np,sys\r\nA = cv2.imread('apple.jpg')\r\nB = cv2.imread('orange.jpg')\r\n# A i\u00e7in Gaussian piramidi olu\u015fturuluyor\r\nG = A.copy()\r\ngpA = [G]\r\nfor i in xrange(6):\r\n G = cv2.pyrDown(G)\r\n gpA.append(G)\r\n# B i\u00e7in Gaussian piramidi olu\u015fturuluyor\r\nG = B.copy()\r\ngpB = [G]\r\nfor i in xrange(6):\r\n G = cv2.pyrDown(G)\r\n gpB.append(G)\r\n# A i\u00e7in Laplacian piramidi olu\u015fturuluyor\r\nlpA = [gpA[5]]\r\nfor i in xrange(5,0,-1):\r\n GE = cv2.pyrUp(gpA[i])\r\n L = cv2.subtract(gpA[i-1],GE)\r\n lpA.append(L)\r\n# B i\u00e7in Laplacian piramidi olu\u015fturuluyor\r\nlpB = [gpB[5]]\r\nfor i in xrange(5,0,-1):\r\n GE = cv2.pyrUp(gpB[i])\r\n L = cv2.subtract(gpB[i-1],GE)\r\n lpB.append(L)\r\n# \u015eimdi her d\u00fczeyde g\u00f6r\u00fcnt\u00fcn\u00fcn sol ve sa\u011f yar\u0131s\u0131 eklenir\r\nLS = []\r\nfor la,lb in zip(lpA,lpB):\r\n rows,cols,dpt = la.shape\r\n ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))\r\n LS.append(ls)\r\n# \u015fimdi yeniden yap\u0131land\u0131ral\u0131m\r\nls_ = LS[0]\r\nfor i in xrange(1,6):\r\n ls_ = cv2.pyrUp(ls_)\r\n ls_ = cv2.add(ls_, LS[i])\r\n# Her yar\u0131m direkt ba\u011flant\u0131 ile g\u00f6r\u00fcnt\u00fc\r\nreal = np.hstack((A[:,:cols/2],B[:,cols/2:]))\r\ncv2.imwrite('Pyramid_blending2.jpg',ls_)\r\ncv2.imwrite('Direct_blending.jpg',real)\r\n```\r\n\r\n### Ek kaynak :\r\n\r\n[Image Blending ( g\u00f6r\u00fcnt\u00fc kar\u015f\u0131la\u015ft\u0131ma )](http://pages.cs.wisc.edu/~csverma/CS766_09/ImageMosaic/imagemosaic.html)"}} |
| parent author | |
| parent permlink | coogger |
| permlink | goruntu-piramitleri |
| title | Görüntü Piramitleri |
| Transaction Info | Block #33098399/Trx 924dea83962fac766bcc0158fe7b5ef09096f189 |
View Raw JSON Data
{
"block": 33098399,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntu-piramitleri\">\n\n\n <img alt=\"görüntü-piramitleri\" src=\"https://www.coogger.com/media/images/opencv_messi.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntu-piramitleri\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"image\", \"opencv\", \"coogger\", \"piramitler\", \"pyramids\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"> Image Pyramids\\r\\n\\r\\n[TOC]\\r\\n\\r\\n## Hedef\\r\\n\\r\\nBu b\\u00f6l\\u00fcmde,\\r\\n- G\\u00f6r\\u00fcnt\\u00fc piramitlerini \\u00f6\\u011frenece\\u011fiz\\r\\n- Biz g\\u00f6r\\u00fcnt\\u00fc piramitleri yeni bir meyve olu\\u015fturmak i\\u00e7in kullanaca\\u011f\\u0131z, \\\"Orapple\\u201d\\r\\n- ve bu fonksiyonlar\\u0131 g\\u00f6rece\\u011fiz: `cv2.pyrUp()`, `cv2.pyridge()`\\r\\n\\r\\n## Teori\\r\\n\\r\\nNormalde, sabit boyutlu bir g\\u00f6r\\u00fcnt\\u00fc ile \\u00e7al\\u0131\\u015f\\u0131rd\\u0131k. Ama baz\\u0131 durumlarda, ayn\\u0131 g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn farkl\\u0131 \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fck g\\u00f6r\\u00fcnt\\u00fcleri ile \\u00e7al\\u0131\\u015fmak gerekir. \\u00d6rne\\u011fin, bir g\\u00f6r\\u00fcnt\\u00fcde bir \\u015fey ararken y\\u00fcz gibi, nesnenin g\\u00f6r\\u00fcnt\\u00fcde ne boyutta olabilece\\u011fine emin olamay\\u0131z. Bu durumda farkl\\u0131 \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fck ve t\\u00fcm g\\u00f6r\\u00fcnt\\u00fclerde nesne aramak i\\u00e7in g\\u00f6r\\u00fcnt\\u00fc k\\u00fcmesi olu\\u015fturmak gerekir. Farkl\\u0131 \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fc\\u011fe sahip bu g\\u00f6r\\u00fcnt\\u00fc k\\u00fcmesine g\\u00f6r\\u00fcnt\\u00fc piramitleri denir ( \\u00e7\\u00fcnk\\u00fc en alttaki en b\\u00fcy\\u00fck g\\u00f6r\\u00fcnt\\u00fc ve en \\u00fcstteki en k\\u00fc\\u00e7\\u00fck g\\u00f6r\\u00fcnt\\u00fc ile y\\u0131\\u011f\\u0131nda tutulduklar\\u0131 zaman piramitlere benzer. ).\\r\\n\\r\\n**\\u0130ki \\u00e7e\\u015fit g\\u00f6r\\u00fcnt\\u00fc piramidi vard\\u0131r**\\r\\n- **Gaussian Pyramid** ( Gauss piramidi )\\r\\n- **Laplacian Pyramids** ( Laplacian piramitleri )\\r\\n\\r\\nGaussian piramidi y\\u00fcksek d\\u00fczey ( d\\u00fc\\u015f\\u00fck \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fck ) d\\u00fc\\u015f\\u00fck d\\u00fczey (y\\u00fcksek \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fck) resim ( g\\u00f6r\\u00fcnt\\u00fc )deki ard\\u0131\\u015f\\u0131k sat\\u0131r ve s\\u00fctunlar\\u0131 kald\\u0131rarak olu\\u015fturulur. Daha sonra daha y\\u00fcksek d\\u00fczeydeki her piksel Gauss a\\u011f\\u0131rl\\u0131klar\\u0131 ile temel d\\u00fczeyde 5 pikselden gelen katk\\u0131yla olu\\u015fur.\\r\\n\\r\\nBunu yaparak bir , **M x X** g\\u00f6r\\u00fcnt\\u00fcs\\u00fc **M/2 x N/2** g\\u00f6r\\u00fcnt\\u00fcs\\u00fc olur.\\r\\n\\r\\nYani alan orijinal alan\\u0131n d\\u00f6rtte birine d\\u00fc\\u015fer. Buna oktav ( Octave ) denir. Biz piramidin daha alt\\u0131na giderek ( yani \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fck azal\\u0131r ) ayn\\u0131 desen devam eder. Benzer \\u015fekilde geni\\u015flerken, alan her d\\u00fczeyde 4 kez olur. Gauss piramitlerini `cv2.pyrDown()` ve `cv2.pyrUp()` functions fonksiyonlar\\u0131n\\u0131 kullanarak bulabiliriz.\\r\\n\\r\\n```python\\r\\nimg = cv2.imread('messi5.jpg')\\r\\nlower_reso = cv2.pyrDown(higher_reso)\\r\\n```\\r\\nA\\u015fa\\u011f\\u0131da bir g\\u00f6r\\u00fcnt\\u00fc piramidinde 4 seviyedir.\\r\\n<center></center>\\r\\n\\u015eimdi g\\u00f6r\\u00fcnt\\u00fc piramitlerinin a\\u015fag\\u0131s\\u0131na inebiliriz `cv2.pyrUp()` fonksiyonu ile.\\r\\n`higher_reso2 = cv2.pyrUp(lower_reso)`\\r\\n\\r\\nUnutmay\\u0131n, `higher_reso2` `higher_reso` e\\u015fit de\\u011fildir, \\u00e7\\u00fcnk\\u00fc \\u00e7\\u00f6z\\u00fcn\\u00fcrl\\u00fc\\u011f\\u00fc d\\u00fc\\u015f\\u00fcrd\\u00fckten sonra bilgiyi kaybedersin. A\\u015fa\\u011f\\u0131da g\\u00f6r\\u00fcnt\\u00fc \\u00f6nceki durumda en k\\u00fc\\u00e7\\u00fck g\\u00f6r\\u00fcnt\\u00fcden olu\\u015fturulan piramit 3 d\\u00fczey a\\u015fa\\u011f\\u0131d\\u0131r. Orijinal g\\u00f6r\\u00fcnt\\u00fc ile kar\\u015f\\u0131la\\u015ft\\u0131r\\u0131n.\\r\\n\\r\\n<center></center>\\r\\nLaplacian piramitleri Gauss piramitlerinden olu\\u015fur. Bunun i\\u00e7in \\u00f6zel bir i\\u015flev yoktur. Laplacian Piramidi g\\u00f6r\\u00fcnt\\u00fcleri sadece kenar g\\u00f6r\\u00fcnt\\u00fcleri gibidir. Elementlerin \\u00e7o\\u011fu s\\u0131f\\u0131rd\\u0131r. G\\u00f6r\\u00fcnt\\u00fc s\\u0131k\\u0131\\u015ft\\u0131rmas\\u0131nda kullan\\u0131l\\u0131rlar. Laplacian piramidinde bir seviye Gauss piramidindeki bu seviye ile Gauss piramidindeki \\u00fcst seviyesinin geni\\u015fletilmi\\u015f versiyonu aras\\u0131ndaki fark ile olu\\u015fur. Bir Laplacian d\\u00fczeyi \\u00fc\\u00e7 d\\u00fczeyleri a\\u015fa\\u011f\\u0131daki gibi g\\u00f6r\\u00fcn\\u00fcr. (kontrast i\\u00e7eri\\u011fini geli\\u015ftirmek i\\u00e7in ayarlan\\u0131r gibi g\\u00f6r\\u00fcnecektir):\\r\\n\\r\\n<center></center>\\r\\n\\r\\n## Piramitleri Kullanarak G\\u00f6r\\u00fcnt\\u00fc Kar\\u0131\\u015ft\\u0131rma\\r\\n\\r\\nG\\u00f6r\\u00fcnt\\u00fc kar\\u015f\\u0131la\\u015ft\\u0131rma piramitlerin bir uygulamas\\u0131d\\u0131r. \\u00d6rne\\u011fin, g\\u00f6r\\u00fcnt\\u00fc dikiminde iki g\\u00f6r\\u00fcnt\\u00fcy\\u00fc bir araya getirmeniz gerekir, ancak g\\u00f6r\\u00fcnt\\u00fcler aras\\u0131ndaki kesintiler nedeniyle iyi g\\u00f6r\\u00fcnmeyebilir. Bu durumda, piramitler ile kar\\u0131\\u015ft\\u0131rma g\\u00f6r\\u00fcnt\\u00fclerde \\u00e7ok fazla veri b\\u0131rakmadan sorunsuz kar\\u0131\\u015ft\\u0131rma sa\\u011flar. Bunun klasik bir \\u00f6rne\\u011fi iki meyvenin, portakal ve elma kar\\u0131\\u015f\\u0131m\\u0131d\\u0131r. \\u015eimdi ne s\\u00f6yledi\\u011fimi anlamak i\\u00e7in sonuca bak\\u0131n.\\r\\n<center></center>\\r\\nL\\u00fctfen ek kaynaklar\\u0131 ve referanslar\\u0131 kontrol edin ,bu g\\u00f6r\\u00fcnt\\u00fc kar\\u0131\\u015ft\\u0131rma, Laplacian Piramitleri vb tam diagramatik ayr\\u0131nt\\u0131lar\\u0131 vard\\u0131r Basit\\u00e7e \\u015f\\u00f6yle yap\\u0131l\\u0131r.\\r\\n\\r\\n- Elma ve portakal olan iki resim y\\u00fcklenir.\\r\\n- Elma ve portakal i\\u00e7in Gauss piramitleri bulunur.\\r\\n- Gauss piramitlerinden Laplacian piramitlerini bulunur.\\r\\n- \\u015eimdi Laplacian piramitlerinin her kademesinde elma ve turuncu sa\\u011f yar\\u0131s\\u0131 sol yar\\u0131s\\u0131 kat\\u0131l\\u0131r.\\r\\n- Sonunda bu ortak g\\u00f6r\\u00fcnt\\u00fc piramitlerinden, orijinal g\\u00f6r\\u00fcnt\\u00fcy\\u00fc yeniden olu\\u015fturun.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131da tam kodu var. (Basitlik u\\u011fruna, her ad\\u0131m ayr\\u0131 ayr\\u0131 yap\\u0131l\\u0131r, daha fazla bellek alabilir. E\\u011fer isterseniz optimize edebilirsiniz).\\r\\n\\r\\n```python\\r\\nimport cv2\\r\\nimport numpy as np,sys\\r\\nA = cv2.imread('apple.jpg')\\r\\nB = cv2.imread('orange.jpg')\\r\\n# A i\\u00e7in Gaussian piramidi olu\\u015fturuluyor\\r\\nG = A.copy()\\r\\ngpA = [G]\\r\\nfor i in xrange(6):\\r\\n G = cv2.pyrDown(G)\\r\\n gpA.append(G)\\r\\n# B i\\u00e7in Gaussian piramidi olu\\u015fturuluyor\\r\\nG = B.copy()\\r\\ngpB = [G]\\r\\nfor i in xrange(6):\\r\\n G = cv2.pyrDown(G)\\r\\n gpB.append(G)\\r\\n# A i\\u00e7in Laplacian piramidi olu\\u015fturuluyor\\r\\nlpA = [gpA[5]]\\r\\nfor i in xrange(5,0,-1):\\r\\n GE = cv2.pyrUp(gpA[i])\\r\\n L = cv2.subtract(gpA[i-1],GE)\\r\\n lpA.append(L)\\r\\n# B i\\u00e7in Laplacian piramidi olu\\u015fturuluyor\\r\\nlpB = [gpB[5]]\\r\\nfor i in xrange(5,0,-1):\\r\\n GE = cv2.pyrUp(gpB[i])\\r\\n L = cv2.subtract(gpB[i-1],GE)\\r\\n lpB.append(L)\\r\\n# \\u015eimdi her d\\u00fczeyde g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn sol ve sa\\u011f yar\\u0131s\\u0131 eklenir\\r\\nLS = []\\r\\nfor la,lb in zip(lpA,lpB):\\r\\n rows,cols,dpt = la.shape\\r\\n ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))\\r\\n LS.append(ls)\\r\\n# \\u015fimdi yeniden yap\\u0131land\\u0131ral\\u0131m\\r\\nls_ = LS[0]\\r\\nfor i in xrange(1,6):\\r\\n ls_ = cv2.pyrUp(ls_)\\r\\n ls_ = cv2.add(ls_, LS[i])\\r\\n# Her yar\\u0131m direkt ba\\u011flant\\u0131 ile g\\u00f6r\\u00fcnt\\u00fc\\r\\nreal = np.hstack((A[:,:cols/2],B[:,cols/2:]))\\r\\ncv2.imwrite('Pyramid_blending2.jpg',ls_)\\r\\ncv2.imwrite('Direct_blending.jpg',real)\\r\\n```\\r\\n\\r\\n### Ek kaynak :\\r\\n\\r\\n[Image Blending ( g\\u00f6r\\u00fcnt\\u00fc kar\\u015f\\u0131la\\u015ft\\u0131ma )](http://pages.cs.wisc.edu/~csverma/CS766_09/ImageMosaic/imagemosaic.html)\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "goruntu-piramitleri",
"title": "Görüntü Piramitleri"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:47:54",
"trx_id": "924dea83962fac766bcc0158fe7b5ef09096f189",
"trx_in_block": 12,
"virtual_op": false
}hakancelikpublished a new post: konturler-contours2019/05/21 09:41:18
hakancelikpublished a new post: konturler-contours
2019/05/21 09:41:18
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/konturler-contours"> <img alt="opencv Konturler" src="https://www.coogger.com/media/images/konturler.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/konturler-contours">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["findcontours", "opencv", "coogger", "cv2", "drawcontours"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "** Neler \u00f6\u011frenece\u011fiz ?**\r\n\r\n[TOC]\r\n\r\n## Kontur nedir ? ( contours )\r\nKonturlar, ayn\u0131 renk veya yo\u011funlu\u011fa sahip olan t\u00fcm kesintisiz noktalar\u0131 (s\u0131n\u0131r boyunca) birle\u015ftiren bir e\u011fri olarak basit\u00e7e a\u00e7\u0131klanabilir. Konturlar, \u015fekil analizi, nesne alg\u0131lama ve tan\u0131ma i\u00e7in yararl\u0131 bir ara\u00e7t\u0131r.\r\n\r\n- Daha iyi do\u011fruluk i\u00e7in ikili g\u00f6rsel kullan\u0131l\u0131r ( binary images. ) yani kontur bulmadan \u00f6nce, e\u015fik veya canny kenar alg\u0131lama uygulan\u0131r\r\n- **findContours** fonksiyonu kaynak g\u00f6r\u00fcnt\u00fcy\u00fc de\u011fi\u015ftirir modifiye eder. Ayr\u0131ca kaynak g\u00f6r\u00fcnt\u00fcy\u00fc, konturleri bulduktan sonra bile istenirse o ba\u015fka de\u011fi\u015fkenler ile saklan\u0131r. yani saklay\u0131n.\r\n- OpenCV'de kontur bulma, siyah zeminden beyaz nesne bulmak gibidir. Hat\u0131rlay\u0131n, bulunmas\u0131 gereken nesne beyaz olmal\u0131 ve arka plan siyah olmal\u0131.\r\n\r\n\u0130kili g\u00f6rselin konturlerini nas\u0131l bulaca\u011f\u0131m\u0131za bakal\u0131m.\r\n\r\n```python\r\nimport numpy as np\r\nimport cv2\r\nim = cv2.imread('test.jpg')\r\nimgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)\r\nret, thresh = cv2.threshold(imgray, 127, 255, 0)\r\nimage, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\r\n```\r\n\r\n`cv2.findContours()` fonksiyonunda 3 tane arg\u00fcman oldu\u011funu g\u00f6rm\u00fc\u015fs\u00fcn\u00fczd\u00fcr, bunlar\r\n\r\n- Kaynak resim\r\n- Kontur alma modu ( contour retrieval mode )\r\n- Kontur yakla\u015f\u0131m y\u00f6ntemi ( contour approximation method )\r\n\r\nve g\u00f6rselde ki konturler ve hiyerar\u015f\u0131 \u00e7\u0131kart\u0131l\u0131yor.\r\n\r\nkonturler g\u00f6rsel i\u00e7indeki b\u00fct\u00fcn konturlerin python listesidir. Her bir kontur nesnenin s\u0131n\u0131r noktalar\u0131n\u0131n (x,y) kordinatlar\u0131n\u0131n numpy dizisidir.\r\n\r\n## Konturleri nas\u0131l \u00e7izeriz ?\r\n\r\nKonturleri \u00e7izmek i\u00e7in `cv2.drawContours` fonksiyonu kullan\u0131l\u0131r. Bu fonksiyon ayr\u0131ca s\u0131n\u0131r noktalar\u0131 verilen herhangi bit \u015feklin \u00e7iziminide destekler.\r\n\r\n- \u0130lk arg\u00fcman kaynak resim ( source image )\r\n- \u0130kinci arg\u00fcman bir Python listesi olarak ge\u00e7mesi gereken contours\r\n- \u00dc\u00e7\u00fcnc\u00fc arg\u00fcman konturlerin dizinidir ( bir kontur \u00e7izildi\u011finde kullan\u0131\u015fl\u0131d\u0131r. B\u00fct\u00fcn konturleri \u00e7izmek i\u00e7in, pass-1) ve geriye kalan arg\u00fcmanlar color ( renk ) thickness ( kal\u0131nl\u0131k ) vb.\r\n\r\nBir resmin b\u00fct\u00fcn konturlerini \u00e7izmek\r\n\r\n`img = cv2.drawContours(img, contours, -1, (0,255,0), 3)`\r\n\r\nBir kontur \u00e7izmek i\u00e7in, 4. konturu s\u00f6yle ( say 4th contour ):\r\n\r\n`img = cv2.drawContours(img, contours, 3, (0,255,0), 3)`\r\n\r\nAma \u00e7o\u011fu zaman, a\u015fa\u011f\u0131daki y\u00f6ntem yararl\u0131 olacakt\u0131r:\r\n\r\n```python\r\ncnt = contours[4]\r\nimg = cv2.drawContours(img, [cnt], 0, (0,255,0), 3)\r\n```\r\n\r\nNot : Son iki y\u00f6ntem ayn\u0131d\u0131r, ancak ilerledi\u011finizde, sonuncusunun daha yararl\u0131 oldu\u011funu g\u00f6receksiniz.\r\n\r\n## Kontur Yakla\u015f\u0131m Y\u00f6ntemi ( Contour Approximation Method )\r\n\r\nBu \u00fc\u00e7\u00fcnc\u00fc arg\u00fcman olan `cv2.findContours` fonksiyonudur peki asl\u0131nda bu nedir ?\r\n\r\nYukar\u0131da, kont\u00fcrlerin ayn\u0131 yo\u011funlukta bir \u015feklin s\u0131n\u0131rlar\u0131 oldu\u011funu s\u00f6yledik. Bir \u015feklin s\u0131n\u0131r\u0131n\u0131 (x, y) koordinatlar\u0131 saklar. Ancak b\u00fct\u00fcn koordinatlar\u0131 sakl\u0131yor mu? \u0130\u015fte bu saklanacak olan konturleri yakla\u015ft\u0131rma metodu ile bulunur.\r\n\r\nE\u011fer `cv2.CHAIN_APPROX_NONE` de\u011ferini es ( pass ) ge\u00e7erseniz, b\u00fct\u00fcn s\u0131n\u0131r noktalar\u0131 depolan\u0131r. Ancak asl\u0131nda b\u00fct\u00fcn noktalara ihtiyac\u0131n\u0131z varm\u0131 d\u0131r. \u00d6rne\u011fin d\u00fcz bir \u00e7izginin konturunu buldunuz. Bunu temsil etmek i\u00e7in \u00e7izgideki b\u00fct\u00fcn noktalara ihtiyac\u0131n\u0131z varm\u0131 ? Hay\u0131r o \u00e7izginin sadece iki biti\u015f noktas\u0131na ihtiyac\u0131n\u0131z vard\u0131r. `cv2.CHAIN_APPROX_SIMPLE` bu ne yapar. Gereksiz t\u00fcm noktalar\u0131 kald\u0131r\u0131r ve konturu s\u0131k\u0131\u015ft\u0131r\u0131r, b\u00f6ylece belle\u011fi kurtar\u0131r.\r\n\r\nA\u015fa\u011f\u0131daki dikd\u00f6rtgen g\u00f6r\u00fcnt\u00fcs\u00fc bu tekni\u011fi g\u00f6stermektedir. Kontur dizideki t\u00fcm koordinatlar\u0131n \u00fczerine bir daire \u00e7izer (mavi renkle \u00e7izilmi\u015f). \u0130lk resim, cv2 ile elde etti\u011fim noktalar\u0131 ( points ) g\u00f6steriyor. `CHAIN_APPROX_NONE` (734 nokta ( points )) ve \u0130kinci resim, `cv2.CHAIN_APPROX_SIMPLE` (yaln\u0131zca 4 nokta) i\u00e7eren bir resim g\u00f6sterir. Bu \u015fekilde haf\u0131zadan kazanm\u0131\u015f oluyoruz.\r\n\r\n<center></center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | konturler-contours |
| title | Konturler ( Contours ) |
| Transaction Info | Block #33098267/Trx 65b61f22c7109832a919faa058c1e7973a5e587a |
View Raw JSON Data
{
"block": 33098267,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/konturler-contours\">\n\n\n <img alt=\"opencv Konturler\" src=\"https://www.coogger.com/media/images/konturler.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/konturler-contours\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"findcontours\", \"opencv\", \"coogger\", \"cv2\", \"drawcontours\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"** Neler \\u00f6\\u011frenece\\u011fiz ?**\\r\\n\\r\\n[TOC]\\r\\n\\r\\n## Kontur nedir ? ( contours )\\r\\nKonturlar, ayn\\u0131 renk veya yo\\u011funlu\\u011fa sahip olan t\\u00fcm kesintisiz noktalar\\u0131 (s\\u0131n\\u0131r boyunca) birle\\u015ftiren bir e\\u011fri olarak basit\\u00e7e a\\u00e7\\u0131klanabilir. Konturlar, \\u015fekil analizi, nesne alg\\u0131lama ve tan\\u0131ma i\\u00e7in yararl\\u0131 bir ara\\u00e7t\\u0131r.\\r\\n\\r\\n- Daha iyi do\\u011fruluk i\\u00e7in ikili g\\u00f6rsel kullan\\u0131l\\u0131r ( binary images. ) yani kontur bulmadan \\u00f6nce, e\\u015fik veya canny kenar alg\\u0131lama uygulan\\u0131r\\r\\n- **findContours** fonksiyonu kaynak g\\u00f6r\\u00fcnt\\u00fcy\\u00fc de\\u011fi\\u015ftirir modifiye eder. Ayr\\u0131ca kaynak g\\u00f6r\\u00fcnt\\u00fcy\\u00fc, konturleri bulduktan sonra bile istenirse o ba\\u015fka de\\u011fi\\u015fkenler ile saklan\\u0131r. yani saklay\\u0131n.\\r\\n- OpenCV'de kontur bulma, siyah zeminden beyaz nesne bulmak gibidir. Hat\\u0131rlay\\u0131n, bulunmas\\u0131 gereken nesne beyaz olmal\\u0131 ve arka plan siyah olmal\\u0131.\\r\\n\\r\\n\\u0130kili g\\u00f6rselin konturlerini nas\\u0131l bulaca\\u011f\\u0131m\\u0131za bakal\\u0131m.\\r\\n\\r\\n```python\\r\\nimport numpy as np\\r\\nimport cv2\\r\\nim = cv2.imread('test.jpg')\\r\\nimgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)\\r\\nret, thresh = cv2.threshold(imgray, 127, 255, 0)\\r\\nimage, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\\r\\n```\\r\\n\\r\\n`cv2.findContours()` fonksiyonunda 3 tane arg\\u00fcman oldu\\u011funu g\\u00f6rm\\u00fc\\u015fs\\u00fcn\\u00fczd\\u00fcr, bunlar\\r\\n\\r\\n- Kaynak resim\\r\\n- Kontur alma modu ( contour retrieval mode )\\r\\n- Kontur yakla\\u015f\\u0131m y\\u00f6ntemi ( contour approximation method )\\r\\n\\r\\nve g\\u00f6rselde ki konturler ve hiyerar\\u015f\\u0131 \\u00e7\\u0131kart\\u0131l\\u0131yor.\\r\\n\\r\\nkonturler g\\u00f6rsel i\\u00e7indeki b\\u00fct\\u00fcn konturlerin python listesidir. Her bir kontur nesnenin s\\u0131n\\u0131r noktalar\\u0131n\\u0131n (x,y) kordinatlar\\u0131n\\u0131n numpy dizisidir.\\r\\n\\r\\n## Konturleri nas\\u0131l \\u00e7izeriz ?\\r\\n\\r\\nKonturleri \\u00e7izmek i\\u00e7in `cv2.drawContours` fonksiyonu kullan\\u0131l\\u0131r. Bu fonksiyon ayr\\u0131ca s\\u0131n\\u0131r noktalar\\u0131 verilen herhangi bit \\u015feklin \\u00e7iziminide destekler.\\r\\n\\r\\n- \\u0130lk arg\\u00fcman kaynak resim ( source image )\\r\\n- \\u0130kinci arg\\u00fcman bir Python listesi olarak ge\\u00e7mesi gereken contours\\r\\n- \\u00dc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman konturlerin dizinidir ( bir kontur \\u00e7izildi\\u011finde kullan\\u0131\\u015fl\\u0131d\\u0131r. B\\u00fct\\u00fcn konturleri \\u00e7izmek i\\u00e7in, pass-1) ve geriye kalan arg\\u00fcmanlar color ( renk ) thickness ( kal\\u0131nl\\u0131k ) vb.\\r\\n\\r\\nBir resmin b\\u00fct\\u00fcn konturlerini \\u00e7izmek\\r\\n\\r\\n`img = cv2.drawContours(img, contours, -1, (0,255,0), 3)`\\r\\n\\r\\nBir kontur \\u00e7izmek i\\u00e7in, 4. konturu s\\u00f6yle ( say 4th contour ):\\r\\n\\r\\n`img = cv2.drawContours(img, contours, 3, (0,255,0), 3)`\\r\\n\\r\\nAma \\u00e7o\\u011fu zaman, a\\u015fa\\u011f\\u0131daki y\\u00f6ntem yararl\\u0131 olacakt\\u0131r:\\r\\n\\r\\n```python\\r\\ncnt = contours[4]\\r\\nimg = cv2.drawContours(img, [cnt], 0, (0,255,0), 3)\\r\\n```\\r\\n\\r\\nNot : Son iki y\\u00f6ntem ayn\\u0131d\\u0131r, ancak ilerledi\\u011finizde, sonuncusunun daha yararl\\u0131 oldu\\u011funu g\\u00f6receksiniz.\\r\\n\\r\\n## Kontur Yakla\\u015f\\u0131m Y\\u00f6ntemi ( Contour Approximation Method )\\r\\n\\r\\nBu \\u00fc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman olan `cv2.findContours` fonksiyonudur peki asl\\u0131nda bu nedir ?\\r\\n\\r\\nYukar\\u0131da, kont\\u00fcrlerin ayn\\u0131 yo\\u011funlukta bir \\u015feklin s\\u0131n\\u0131rlar\\u0131 oldu\\u011funu s\\u00f6yledik. Bir \\u015feklin s\\u0131n\\u0131r\\u0131n\\u0131 (x, y) koordinatlar\\u0131 saklar. Ancak b\\u00fct\\u00fcn koordinatlar\\u0131 sakl\\u0131yor mu? \\u0130\\u015fte bu saklanacak olan konturleri yakla\\u015ft\\u0131rma metodu ile bulunur.\\r\\n\\r\\nE\\u011fer `cv2.CHAIN_APPROX_NONE` de\\u011ferini es ( pass ) ge\\u00e7erseniz, b\\u00fct\\u00fcn s\\u0131n\\u0131r noktalar\\u0131 depolan\\u0131r. Ancak asl\\u0131nda b\\u00fct\\u00fcn noktalara ihtiyac\\u0131n\\u0131z varm\\u0131 d\\u0131r. \\u00d6rne\\u011fin d\\u00fcz bir \\u00e7izginin konturunu buldunuz. Bunu temsil etmek i\\u00e7in \\u00e7izgideki b\\u00fct\\u00fcn noktalara ihtiyac\\u0131n\\u0131z varm\\u0131 ? Hay\\u0131r o \\u00e7izginin sadece iki biti\\u015f noktas\\u0131na ihtiyac\\u0131n\\u0131z vard\\u0131r. `cv2.CHAIN_APPROX_SIMPLE` bu ne yapar. Gereksiz t\\u00fcm noktalar\\u0131 kald\\u0131r\\u0131r ve konturu s\\u0131k\\u0131\\u015ft\\u0131r\\u0131r, b\\u00f6ylece belle\\u011fi kurtar\\u0131r.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131daki dikd\\u00f6rtgen g\\u00f6r\\u00fcnt\\u00fcs\\u00fc bu tekni\\u011fi g\\u00f6stermektedir. Kontur dizideki t\\u00fcm koordinatlar\\u0131n \\u00fczerine bir daire \\u00e7izer (mavi renkle \\u00e7izilmi\\u015f). \\u0130lk resim, cv2 ile elde etti\\u011fim noktalar\\u0131 ( points ) g\\u00f6steriyor. `CHAIN_APPROX_NONE` (734 nokta ( points )) ve \\u0130kinci resim, `cv2.CHAIN_APPROX_SIMPLE` (yaln\\u0131zca 4 nokta) i\\u00e7eren bir resim g\\u00f6sterir. Bu \\u015fekilde haf\\u0131zadan kazanm\\u0131\\u015f oluyoruz.\\r\\n\\r\\n<center></center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "konturler-contours",
"title": "Konturler ( Contours )"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:41:18",
"trx_id": "65b61f22c7109832a919faa058c1e7973a5e587a",
"trx_in_block": 26,
"virtual_op": false
}hakancelikpublished a new post: histogramlar2019/05/21 09:35:15
hakancelikpublished a new post: histogramlar
2019/05/21 09:35:15
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/histogramlar"> <img alt="opencv-histogram" src="https://www.coogger.com/media/images/opencv-histogram.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/histogramlar">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["histogram", "opencv", "coogger", "cv", "calchist"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "**Neler \u00f6\u011frenece\u011fiz ?**\r\n\r\n[TOC]\r\n\r\n# Hadi ba\u015flayal\u0131m\r\n\r\n## Teori\r\nHistogram nedir ? Bir g\u00f6r\u00fcnt\u00fcn\u00fcn yo\u011funluk da\u011f\u0131l\u0131m\u0131n\u0131 veren, grafik veya \u00e7izim olarak d\u00fc\u015f\u00fcnebilirsiniz, Bu \u00e7izim 0 dan 255 pixel aral\u0131\u011f\u0131nda bulunan ( her zaman de\u011fil ) x ekseni i\u00e7indeki ve\r\n\r\nBu sadece g\u00f6rselleri anlamam\u0131z\u0131 sa\u011flayan ba\u015fka bir yoldur. Bir g\u00f6rselin histogram\u0131 incelendi\u011finde\r\n\r\nbu g\u00f6r\u00fcnt\u00fcn\u00fcn kontrast, parlakl\u0131k, yo\u011funluk da\u011f\u0131l\u0131m\u0131 vb. ile ilgili bir \u00f6nsezi al\u0131rs\u0131n\u0131z. G\u00fcn\u00fcm\u00fczde neredeyse b\u00fct\u00fcn g\u00f6rsel i\u015fleme ara\u00e7lar\u0131nda histogram \u00f6zellikleri sa\u011flanmaktad\u0131r.\r\n\r\nA\u015fa\u011f\u0131da Cambridge color websitesinden bir g\u00f6rsel var ve daha fazla bilgi i\u00e7in siteyi ziyaret etmenizi tavsiye ederim.\r\n\r\n<center></center>\r\n\r\nG\u00f6rseli ve onun histogram\u0131n\u0131 g\u00f6rebilirsiniz ( hat\u0131rlay\u0131n histgoram **grayscale** g\u00f6rsel, renk olmandan \u00e7izilir ).\r\n\r\nG\u00f6rselde histogram\u0131n sol b\u00f6lgesinde daha koyu pikseller g\u00f6r\u00fcn\u00fcr ve sa\u011f b\u00f6lgesinde ise daha parlak pikseller g\u00f6r\u00fcn\u00fcr.\r\n\r\nHistogramdan, daha koyu alanlar\u0131 ayd\u0131nl\u0131k alanlardan daha fazla oldu\u011funu g\u00f6rebilirsiniz, ve orta tonlar\u0131n miktar\u0131 (orta aral\u0131ktaki piksel de\u011ferleri, \u00f6rne\u011fin 127 civar\u0131nda) \u00e7ok daha azd\u0131r.\r\n\r\n## Histogramlar\u0131 Bulmak\r\n\r\n\u015eimdi histogram\u0131n ne oldu\u011fu \u00f6\u011frendik ve histogram\u0131n nas\u0131l bulaca\u011f\u0131n\u0131za \u00f6\u011frenmeye ge\u00e7ebiliriz. Hem **OpenCV** hem de **Numpy** k\u00fct\u00fcphanelerini kullanarak bunu yapaca\u011f\u0131z.\r\n\r\n### 1. OpenCV ile Histogram Hesaplama\r\n\r\n\u015eimdi `cv.calcHist()` fonksiyonunu kullanarak histogram bulaca\u011f\u0131z.\r\n\r\n`cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])`\r\n\r\n- images ( g\u00f6rseller ) : Bu uint8 or float32 tipli ( formatl\u0131 ) kaynak g\u00f6r\u00fcnt\u00fcd\u00fcr, k\u00f6\u015feli parantez i\u00e7inde, yani \"[img]\" \u015feklinde verilmelidir.\r\n- channels ( kanallar ): Ayr\u0131ca k\u00f6\u015feli parantez i\u00e7inde verilmi\u015ftir. Histogram\u0131 hesaplad\u0131\u011f\u0131m\u0131z kanal\u0131n indeksidir. \u00d6rne\u011fin, verilen g\u00f6rsel gri tonlamal\u0131 resim ise de\u011feri [0] d\u0131r. Renkli g\u00f6rsel i\u00e7in, mavi, ye\u015fil veya k\u0131rm\u0131z\u0131 kanal\u0131n\u0131n histogram\u0131n\u0131 hesaplamak i\u00e7in [0],[1] veya [2] 'i pas (pass ) ge\u00e7ebilirsiniz.\r\n- mask ( maske ) : maske g\u00f6rseli. B\u00fct\u00fcn g\u00f6rselin histogram\u0131n\u0131 bulmak i\u00e7in None olarak verilir.\r\n- histSize: BIN say\u0131s\u0131n\u0131 temsil eder. K\u00f6\u015feli ayra\u00e7lar halinde verilmelidir. Tam \u00f6l\u00e7ek i\u00e7in, [256] verilir.\r\n- ranges ( aral\u0131k ): bu bizim aral\u0131\u011f\u0131m\u0131zd\u0131r. Normalde [0,256].\r\n\r\nevet kolay bir \u00f6rnek ile ba\u015flayal\u0131m. Basit gri modda bir resim y\u00fckleyelim ve b\u00fct\u00fcn histogramlar\u0131n\u0131 bulal\u0131m.\r\n\r\n```\r\nimg = cv.imread('home.jpg',0)\r\nhist = cv.calcHist([img],[0],None,[256],[0,256])\r\n```\r\n\r\nhist 256x1 boyutlu bir dizidir, her de\u011fer ilgili piksel de\u011fere sahip o g\u00f6r\u00fcnt\u00fcn\u00fcn piksel say\u0131s\u0131na kar\u015f\u0131l\u0131k gelir.\r\n\r\n### 2. Numpy ile Histogram Hesaplama\r\n\r\nNumpy ayr\u0131ca bu fonksiyonu sa\u011flar `np.histogram()`. yani `calcHist()` fonksiyonu yerine a\u015fa\u011f\u0131daki kodu kullanabilirsiniz.\r\n\r\n`hist,bins = np.histogram(img.ravel(),256,[0,256])`\r\n\r\nhits daha \u00f6nce hesaplad\u0131\u011f\u0131m\u0131z de\u011feri ile ayn\u0131d\u0131r. Fakat bins ( kutu #bilmiyorum ) 257 element ( \u00f6\u011fe ) al\u0131r, \u00e7\u00fcnk\u00fc Numpy 0-0.99, 1-1.99, 2-2.99 vb bins de\u011ferleri hesaplar. Son aral\u0131k 255-255.99 olurdu.\r\n\r\nBunu temsil etmek i\u00e7in, bins 256 eklenir. Fakat bizim buna 256'ya ihtiyac\u0131m\u0131z yoktur. maksimum ( upto) 255 de\u011feri yeterlidir.\r\n\r\n#### Ayr\u0131ca:\r\nNumpy'de bulunan `np.histogram()` dan daha h\u0131zl\u0131 olan (10X kat\u0131 ) di\u011fer bir fonksiyon vard\u0131r `np.bincount()` Tek boyutlu histogramlar i\u00e7in daha iyisini deneyebilirsiniz. np.bincount minlength = 256 olarak ayarlamay\u0131 unutmay\u0131n.\r\n\r\n\u00d6rne\u011fin,\r\n\r\n`hist = np.bincount (img.ravel (), minlength = 256)`\r\n\r\n### Not :\r\n\r\nOpencv fonksiyonu np.histogram() fonksiyonundan 40 kat daha h\u0131zl\u0131d\u0131r bu y\u00fczden opencv kullan\u0131n\r\n\r\n\u015fimdi histogramlar\u0131 \u00e7izebiliriz fakat nas\u0131l ? tabiki Matplotlib ile\r\n\r\n## Histogramlar\u0131 \u00c7izmek\r\n> bunun iki yolu vard\u0131r\r\n\r\n- K\u0131sa yol **Matplotlib** ile\r\n- Uzun yok **opencv** \u00e7izim fonksiyonlar\u0131 ile\r\n\r\n\r\n### 1- Matplotlib ile \u00c7izim\r\n\r\nMatplotlib, histogram \u00e7izim fonksiyonu ile gelir: `matplotlib.pyplot.hist()`\r\n\r\nBu fonksiyon do\u011frudan histogram\u0131 bulur ve \u00e7izer. Histogram\u0131 bulmak i\u00e7in `calcHist()` veya `np.histogram()` fonksiyonlar\u0131n\u0131 kullanman\u0131z gerekmez.\r\n\r\nA\u015fa\u011f\u0131daki kodu inceleyin:\r\n\r\n```python\r\nimport numpy as np\r\nimport cv2 as cv\r\nfrom matplotlib import pyplot as plt\r\nimg = cv.imread('home.jpg',0)\r\nplt.hist(img.ravel(),256,[0,256]); plt.show()\r\n```\r\n\r\n<center></center>\r\n\r\nYa da BGR i\u00e7in daha iyi olan matplotlib'in normal grafi\u011fini kullanabilirsiniz . Bunun i\u00e7in \u00f6nce histogram verilerini bulman\u0131z gerekir.\r\n\r\nA\u015fa\u011f\u0131daki kodu deneyin:\r\n\r\n```python\r\nimport numpy as np\r\nimport cv2 as cv\r\nfrom matplotlib import pyplot as plt\r\nimg = cv.imread('home.jpg')\r\ncolor = ('b','g','r')\r\nfor i,col in enumerate(color):\r\n histr = cv.calcHist([img],[i],None,[256],[0,256])\r\n plt.plot(histr,color = col)\r\n plt.xlim([0,256])\r\nplt.show()\r\n```\r\n\r\nSonu\u00e7:\r\n<center></center>\r\n\r\nYukar\u0131daki grafikten, mavinin g\u00f6r\u00fcnt\u00fcde y\u00fcksek de\u011ferli baz\u0131 alanlar bulundu\u011funu d\u00fc\u015febilirsiniz (tabii ki g\u00f6ky\u00fcz\u00fcnden kaynaklanmaktad\u0131r)\r\n\r\n### 2- Opencv Kullanarak \u00c7izmek\r\n\r\nBurada, histogramlar\u0131n de\u011ferlerini bin de\u011ferleri ile birlikte x ve y koordinatlar\u0131na g\u00f6re ayarlayarak yukar\u0131da ayn\u0131 g\u00f6r\u00fcnt\u00fcy\u00fc olu\u015fturmak \u00fczere `cv.line()` veya `cv.polyline()` i\u015flevini kullanarak \u00e7izebilirsiniz.\r\n\r\n#### Mask'\u0131n Uygulanmas\u0131\r\n\r\nB\u00fct\u00fcn resmin histogram\u0131n\u0131 bulmak i\u00e7in `cv.calcHist()` fonksiyonunu kullan\u0131r\u0131z. Peki belirli bir alan\u0131n histogram\u0131n\u0131 bulmak istersek ne yapaca\u011f\u0131z. Sadece histogram\u0131n\u0131 bulmak istedi\u011finiz alan\u0131n beyaz rengi ile mask ( maske ) g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc yarat\u0131n ve aksi takdirde siyah koyu.\r\n\r\n```python\r\nimg = cv.imread('home.jpg',0)\r\n# maske yaratt\u0131k\r\nmask = np.zeros(img.shape[:2], np.uint8)\r\nmask[100:300, 100:400] = 255\r\nmasked_img = cv.bitwise_and(img,img,mask = mask)\r\n# Histogram\u0131 maskeli ve maskesiz olarak hesaplad\u0131k\r\n# Maske i\u00e7in \u00fc\u00e7\u00fcnc\u00fc arg\u00fcman\u0131 kontrol ettik\r\nhist_full = cv.calcHist([img],[0],None,[256],[0,256])\r\nhist_mask = cv.calcHist([img],[0],mask,[256],[0,256])\r\nplt.subplot(221), plt.imshow(img, 'gray')\r\nplt.subplot(222), plt.imshow(mask,'gray')\r\nplt.subplot(223), plt.imshow(masked_img, 'gray')\r\nplt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)\r\nplt.xlim([0,256])\r\nplt.show()\r\n```\r\n\r\n<center></center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | histogramlar |
| title | Histogramlar |
| Transaction Info | Block #33098146/Trx 735112a0528f4de21e2b410271eb25c9893f544a |
View Raw JSON Data
{
"block": 33098146,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/histogramlar\">\n\n\n <img alt=\"opencv-histogram\" src=\"https://www.coogger.com/media/images/opencv-histogram.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/histogramlar\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"histogram\", \"opencv\", \"coogger\", \"cv\", \"calchist\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"**Neler \\u00f6\\u011frenece\\u011fiz ?**\\r\\n\\r\\n[TOC]\\r\\n\\r\\n# Hadi ba\\u015flayal\\u0131m\\r\\n\\r\\n## Teori\\r\\nHistogram nedir ? Bir g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn yo\\u011funluk da\\u011f\\u0131l\\u0131m\\u0131n\\u0131 veren, grafik veya \\u00e7izim olarak d\\u00fc\\u015f\\u00fcnebilirsiniz, Bu \\u00e7izim 0 dan 255 pixel aral\\u0131\\u011f\\u0131nda bulunan ( her zaman de\\u011fil ) x ekseni i\\u00e7indeki ve\\r\\n\\r\\nBu sadece g\\u00f6rselleri anlamam\\u0131z\\u0131 sa\\u011flayan ba\\u015fka bir yoldur. Bir g\\u00f6rselin histogram\\u0131 incelendi\\u011finde\\r\\n\\r\\nbu g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn kontrast, parlakl\\u0131k, yo\\u011funluk da\\u011f\\u0131l\\u0131m\\u0131 vb. ile ilgili bir \\u00f6nsezi al\\u0131rs\\u0131n\\u0131z. G\\u00fcn\\u00fcm\\u00fczde neredeyse b\\u00fct\\u00fcn g\\u00f6rsel i\\u015fleme ara\\u00e7lar\\u0131nda histogram \\u00f6zellikleri sa\\u011flanmaktad\\u0131r.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131da Cambridge color websitesinden bir g\\u00f6rsel var ve daha fazla bilgi i\\u00e7in siteyi ziyaret etmenizi tavsiye ederim.\\r\\n\\r\\n<center></center>\\r\\n\\r\\nG\\u00f6rseli ve onun histogram\\u0131n\\u0131 g\\u00f6rebilirsiniz ( hat\\u0131rlay\\u0131n histgoram **grayscale** g\\u00f6rsel, renk olmandan \\u00e7izilir ).\\r\\n\\r\\nG\\u00f6rselde histogram\\u0131n sol b\\u00f6lgesinde daha koyu pikseller g\\u00f6r\\u00fcn\\u00fcr ve sa\\u011f b\\u00f6lgesinde ise daha parlak pikseller g\\u00f6r\\u00fcn\\u00fcr.\\r\\n\\r\\nHistogramdan, daha koyu alanlar\\u0131 ayd\\u0131nl\\u0131k alanlardan daha fazla oldu\\u011funu g\\u00f6rebilirsiniz, ve orta tonlar\\u0131n miktar\\u0131 (orta aral\\u0131ktaki piksel de\\u011ferleri, \\u00f6rne\\u011fin 127 civar\\u0131nda) \\u00e7ok daha azd\\u0131r.\\r\\n\\r\\n## Histogramlar\\u0131 Bulmak\\r\\n\\r\\n\\u015eimdi histogram\\u0131n ne oldu\\u011fu \\u00f6\\u011frendik ve histogram\\u0131n nas\\u0131l bulaca\\u011f\\u0131n\\u0131za \\u00f6\\u011frenmeye ge\\u00e7ebiliriz. Hem **OpenCV** hem de **Numpy** k\\u00fct\\u00fcphanelerini kullanarak bunu yapaca\\u011f\\u0131z.\\r\\n\\r\\n### 1. OpenCV ile Histogram Hesaplama\\r\\n\\r\\n\\u015eimdi `cv.calcHist()` fonksiyonunu kullanarak histogram bulaca\\u011f\\u0131z.\\r\\n\\r\\n`cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])`\\r\\n\\r\\n- images ( g\\u00f6rseller ) : Bu uint8 or float32 tipli ( formatl\\u0131 ) kaynak g\\u00f6r\\u00fcnt\\u00fcd\\u00fcr, k\\u00f6\\u015feli parantez i\\u00e7inde, yani \\\"[img]\\\" \\u015feklinde verilmelidir.\\r\\n- channels ( kanallar ): Ayr\\u0131ca k\\u00f6\\u015feli parantez i\\u00e7inde verilmi\\u015ftir. Histogram\\u0131 hesaplad\\u0131\\u011f\\u0131m\\u0131z kanal\\u0131n indeksidir. \\u00d6rne\\u011fin, verilen g\\u00f6rsel gri tonlamal\\u0131 resim ise de\\u011feri [0] d\\u0131r. Renkli g\\u00f6rsel i\\u00e7in, mavi, ye\\u015fil veya k\\u0131rm\\u0131z\\u0131 kanal\\u0131n\\u0131n histogram\\u0131n\\u0131 hesaplamak i\\u00e7in [0],[1] veya [2] 'i pas (pass ) ge\\u00e7ebilirsiniz.\\r\\n- mask ( maske ) : maske g\\u00f6rseli. B\\u00fct\\u00fcn g\\u00f6rselin histogram\\u0131n\\u0131 bulmak i\\u00e7in None olarak verilir.\\r\\n- histSize: BIN say\\u0131s\\u0131n\\u0131 temsil eder. K\\u00f6\\u015feli ayra\\u00e7lar halinde verilmelidir. Tam \\u00f6l\\u00e7ek i\\u00e7in, [256] verilir.\\r\\n- ranges ( aral\\u0131k ): bu bizim aral\\u0131\\u011f\\u0131m\\u0131zd\\u0131r. Normalde [0,256].\\r\\n\\r\\nevet kolay bir \\u00f6rnek ile ba\\u015flayal\\u0131m. Basit gri modda bir resim y\\u00fckleyelim ve b\\u00fct\\u00fcn histogramlar\\u0131n\\u0131 bulal\\u0131m.\\r\\n\\r\\n```\\r\\nimg = cv.imread('home.jpg',0)\\r\\nhist = cv.calcHist([img],[0],None,[256],[0,256])\\r\\n```\\r\\n\\r\\nhist 256x1 boyutlu bir dizidir, her de\\u011fer ilgili piksel de\\u011fere sahip o g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn piksel say\\u0131s\\u0131na kar\\u015f\\u0131l\\u0131k gelir.\\r\\n\\r\\n### 2. Numpy ile Histogram Hesaplama\\r\\n\\r\\nNumpy ayr\\u0131ca bu fonksiyonu sa\\u011flar `np.histogram()`. yani `calcHist()` fonksiyonu yerine a\\u015fa\\u011f\\u0131daki kodu kullanabilirsiniz.\\r\\n\\r\\n`hist,bins = np.histogram(img.ravel(),256,[0,256])`\\r\\n\\r\\nhits daha \\u00f6nce hesaplad\\u0131\\u011f\\u0131m\\u0131z de\\u011feri ile ayn\\u0131d\\u0131r. Fakat bins ( kutu #bilmiyorum ) 257 element ( \\u00f6\\u011fe ) al\\u0131r, \\u00e7\\u00fcnk\\u00fc Numpy 0-0.99, 1-1.99, 2-2.99 vb bins de\\u011ferleri hesaplar. Son aral\\u0131k 255-255.99 olurdu.\\r\\n\\r\\nBunu temsil etmek i\\u00e7in, bins 256 eklenir. Fakat bizim buna 256'ya ihtiyac\\u0131m\\u0131z yoktur. maksimum ( upto) 255 de\\u011feri yeterlidir.\\r\\n\\r\\n#### Ayr\\u0131ca:\\r\\nNumpy'de bulunan `np.histogram()` dan daha h\\u0131zl\\u0131 olan (10X kat\\u0131 ) di\\u011fer bir fonksiyon vard\\u0131r `np.bincount()` Tek boyutlu histogramlar i\\u00e7in daha iyisini deneyebilirsiniz. np.bincount minlength = 256 olarak ayarlamay\\u0131 unutmay\\u0131n.\\r\\n\\r\\n\\u00d6rne\\u011fin,\\r\\n\\r\\n`hist = np.bincount (img.ravel (), minlength = 256)`\\r\\n\\r\\n### Not :\\r\\n\\r\\nOpencv fonksiyonu np.histogram() fonksiyonundan 40 kat daha h\\u0131zl\\u0131d\\u0131r bu y\\u00fczden opencv kullan\\u0131n\\r\\n\\r\\n\\u015fimdi histogramlar\\u0131 \\u00e7izebiliriz fakat nas\\u0131l ? tabiki Matplotlib ile\\r\\n\\r\\n## Histogramlar\\u0131 \\u00c7izmek\\r\\n> bunun iki yolu vard\\u0131r\\r\\n\\r\\n- K\\u0131sa yol **Matplotlib** ile\\r\\n- Uzun yok **opencv** \\u00e7izim fonksiyonlar\\u0131 ile\\r\\n\\r\\n\\r\\n### 1- Matplotlib ile \\u00c7izim\\r\\n\\r\\nMatplotlib, histogram \\u00e7izim fonksiyonu ile gelir: `matplotlib.pyplot.hist()`\\r\\n\\r\\nBu fonksiyon do\\u011frudan histogram\\u0131 bulur ve \\u00e7izer. Histogram\\u0131 bulmak i\\u00e7in `calcHist()` veya `np.histogram()` fonksiyonlar\\u0131n\\u0131 kullanman\\u0131z gerekmez.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131daki kodu inceleyin:\\r\\n\\r\\n```python\\r\\nimport numpy as np\\r\\nimport cv2 as cv\\r\\nfrom matplotlib import pyplot as plt\\r\\nimg = cv.imread('home.jpg',0)\\r\\nplt.hist(img.ravel(),256,[0,256]); plt.show()\\r\\n```\\r\\n\\r\\n<center></center>\\r\\n\\r\\nYa da BGR i\\u00e7in daha iyi olan matplotlib'in normal grafi\\u011fini kullanabilirsiniz . Bunun i\\u00e7in \\u00f6nce histogram verilerini bulman\\u0131z gerekir.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131daki kodu deneyin:\\r\\n\\r\\n```python\\r\\nimport numpy as np\\r\\nimport cv2 as cv\\r\\nfrom matplotlib import pyplot as plt\\r\\nimg = cv.imread('home.jpg')\\r\\ncolor = ('b','g','r')\\r\\nfor i,col in enumerate(color):\\r\\n histr = cv.calcHist([img],[i],None,[256],[0,256])\\r\\n plt.plot(histr,color = col)\\r\\n plt.xlim([0,256])\\r\\nplt.show()\\r\\n```\\r\\n\\r\\nSonu\\u00e7:\\r\\n<center></center>\\r\\n\\r\\nYukar\\u0131daki grafikten, mavinin g\\u00f6r\\u00fcnt\\u00fcde y\\u00fcksek de\\u011ferli baz\\u0131 alanlar bulundu\\u011funu d\\u00fc\\u015febilirsiniz (tabii ki g\\u00f6ky\\u00fcz\\u00fcnden kaynaklanmaktad\\u0131r)\\r\\n\\r\\n### 2- Opencv Kullanarak \\u00c7izmek\\r\\n\\r\\nBurada, histogramlar\\u0131n de\\u011ferlerini bin de\\u011ferleri ile birlikte x ve y koordinatlar\\u0131na g\\u00f6re ayarlayarak yukar\\u0131da ayn\\u0131 g\\u00f6r\\u00fcnt\\u00fcy\\u00fc olu\\u015fturmak \\u00fczere `cv.line()` veya `cv.polyline()` i\\u015flevini kullanarak \\u00e7izebilirsiniz.\\r\\n\\r\\n#### Mask'\\u0131n Uygulanmas\\u0131\\r\\n\\r\\nB\\u00fct\\u00fcn resmin histogram\\u0131n\\u0131 bulmak i\\u00e7in `cv.calcHist()` fonksiyonunu kullan\\u0131r\\u0131z. Peki belirli bir alan\\u0131n histogram\\u0131n\\u0131 bulmak istersek ne yapaca\\u011f\\u0131z. Sadece histogram\\u0131n\\u0131 bulmak istedi\\u011finiz alan\\u0131n beyaz rengi ile mask ( maske ) g\\u00f6r\\u00fcnt\\u00fcs\\u00fcn\\u00fc yarat\\u0131n ve aksi takdirde siyah koyu.\\r\\n\\r\\n```python\\r\\nimg = cv.imread('home.jpg',0)\\r\\n# maske yaratt\\u0131k\\r\\nmask = np.zeros(img.shape[:2], np.uint8)\\r\\nmask[100:300, 100:400] = 255\\r\\nmasked_img = cv.bitwise_and(img,img,mask = mask)\\r\\n# Histogram\\u0131 maskeli ve maskesiz olarak hesaplad\\u0131k\\r\\n# Maske i\\u00e7in \\u00fc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman\\u0131 kontrol ettik\\r\\nhist_full = cv.calcHist([img],[0],None,[256],[0,256])\\r\\nhist_mask = cv.calcHist([img],[0],mask,[256],[0,256])\\r\\nplt.subplot(221), plt.imshow(img, 'gray')\\r\\nplt.subplot(222), plt.imshow(mask,'gray')\\r\\nplt.subplot(223), plt.imshow(masked_img, 'gray')\\r\\nplt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)\\r\\nplt.xlim([0,256])\\r\\nplt.show()\\r\\n```\\r\\n\\r\\n<center></center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "histogramlar",
"title": "Histogramlar"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:35:15",
"trx_id": "735112a0528f4de21e2b410271eb25c9893f544a",
"trx_in_block": 20,
"virtual_op": false
}hakancelikstarted power down of 110.702 HP2019/05/21 09:14:45
hakancelikstarted power down of 110.702 HP
2019/05/21 09:14:45
| account | hakancelik |
| vesting shares | 179699.723521 VESTS |
| Transaction Info | Block #33097736/Trx f7f9021388796867c76e356a48aa0ce18a696601 |
View Raw JSON Data
{
"block": 33097736,
"op": [
"withdraw_vesting",
{
"account": "hakancelik",
"vesting_shares": "179699.723521 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:14:45",
"trx_id": "f7f9021388796867c76e356a48aa0ce18a696601",
"trx_in_block": 14,
"virtual_op": false
}hakancelikpublished a new post: django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr2019/05/21 09:07:30
hakancelikpublished a new post: django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr
2019/05/21 09:07:30
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr"> <img alt="coogger images" src="https://www.coogger.com/media/images/coogger-images.png"> </a> <a href="https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["image", "coogger", "app", "cooggerimages", "django"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "**s\u00fcr\u00fcm V0.0.4**\r\n\r\n**Konu Ba\u015fl\u0131klar\u0131**\r\n\r\n[TOC]\r\n\r\n## \u0130ndirme / G\u00fcncelleme\r\nBir python paketi oldu\u011fu i\u00e7in pip kullanarka rahatl\u0131kla indirme i\u015flemini yapabiliriz, a\u015fa\u011f\u0131daki kodlardan size uygun olan\u0131 pip paket y\u00f6neticisi y\u00fckl\u00fc pc'nizde yazarak i\u015flemi yapabilirsiniz.\r\n\r\n- \r\n```\r\npip install cooggerimages\r\n```\r\nBelirli bir s\u00fcr\u00fcm\u00fc indirmek isterseniz\r\n\r\n- \r\n```\r\npip install cooggerimages==0.0.4\r\n```\r\nG\u00fcncellemek isterseniz\r\n\r\n- \r\n```\r\npip install cooggerimages -U\r\n```\r\n\r\n## Yap\u0131land\u0131rma / Kurulum\r\n\r\nPaket indirme i\u015fleminden sonra django projenizin **/settings.py** dosyas\u0131n\u0131 a\u00e7arak `INSTALLED_APPS` k\u0131sm\u0131na **cooggerimages** uygulamas\u0131n\u0131 ekliyoruz.\r\n\r\n**/settings.py**\r\n```python\r\nINSTALLED_APPS = [\r\n\t...,\r\n\t...,\r\n\t...,\r\n\t[\"cooggerimages\"],\r\n]\r\n```\r\n\r\nCooggerimages'\u0131n varsay\u0131lan ayarlar\u0131 bulunmaktad\u0131r dilerseniz bunlar\u0131 de\u011fi\u015ftirebilirsiniz.\r\n\r\n```python\r\nCOOGGERIMAGES = dict(\r\n folder_name=\"images/\"\r\n upload_url=\"coogger-images/\"\r\n upload_url_name=\"coogger-images\"\r\n max_size=4 # MB\r\n)\r\n```\r\nYukar\u0131daki ayarlar cooggerimages'\u0131n varsay\u0131lan ayarlar\u0131d\u0131r.\r\n\r\n- **folder_name**\r\nY\u00fcklenen resimlerin topland\u0131\u011f\u0131 dosyan\u0131n adresidir.\r\n\r\n- **upload_url**\r\nY\u00fcklenecek resimlerin internet adresidir, bu adrese get iste\u011fi gelirse y\u00fcklenme sayfas\u0131 a\u00e7\u0131l\u0131r, post iste\u011fi gelirse resim y\u00fcklenir.\r\n\r\n- **upload_url_name**\r\nupload_url'\u0131n ismidir.\r\n\r\n- **max_size**\r\nY\u00fcklenecek olan resmin MB olarak maximum boyutunu belirler.\r\n\r\n## Yeni Bir Veri Taban\u0131\r\nE\u011fer bu uygulama i\u00e7in yeni bir veri taban\u0131 kullanmak isterseniz, a\u015fa\u011f\u0131da \u00f6rnek olarak verece\u011fim veri taban\u0131 y\u00f6nlendiricisini ( router ) kullanabilirsiniz, ama \u00f6nce\r\n\r\n**/settings.py** dosyam\u0131za bunlar\u0131 eklememiz gerekiyor.\r\n```python\r\nDATABASES[\"coogger_images\"] = dict(\r\n ENGINE=\"django.db.backends.sqlite3\",\r\n NAME=\"coogger_images\",\r\n)\r\n# yukar\u0131da uygulamam\u0131z i\u00e7in yeni bir veri taban\u0131 ekledik\r\n\r\nDATABASE_ROUTERS = [\r\n \"path.to.routers.DBRouter\",\r\n]\r\n# router adresini yazd\u0131k\r\n```\r\n\r\n**/path.to.routers.py** dosyam\u0131z\u0131 a\u00e7t\u0131k ve a\u015fa\u011f\u0131daki kodlar\u0131 yazd\u0131k.\r\n\r\n```python\r\nclass DBRouter:\r\n default_apps = [\r\n \"admin\", \"auth\",\r\n \"contenttypes\", \"sessions\", \"myapp\",\r\n ]\r\n coogger_images = [\r\n \"cooggerimages\"\r\n ]\r\n\r\n def db_for_read(self, model, **hints):\r\n app_label = model._meta.app_label\r\n if app_label in self.default_apps:\r\n return \"default\"\r\n elif app_label in self.coogger_images:\r\n return \"coogger_images\"\r\n\r\n def db_for_write(self, model, **hints):\r\n return self.db_for_read(model, **hints)\r\n\r\n def allow_relation(self, obj1, obj2, **hints):\r\n return True\r\n\r\n def allow_migrate(self, db, app_label, model_name=None, **hints):\r\n if db == \"default\":\r\n if app_label in self.default_apps:\r\n return True\r\n elif db == \"coogger_images\":\r\n if app_label in self.coogger_images:\r\n return True\r\n return False\r\n```\r\n\r\n## Url Konfig\u00fcrasyonu\r\n\r\n**/urls.py**\r\n\r\n```python\r\nurlpatterns.append(\r\n path(\"\", include(\"cooggerimages.urls\")\r\n)\r\n```\r\n\r\n## Kontrol Edelim\r\n\r\n**/settings.py** adresinde `upload_url` b\u00f6l\u00fcm\u00fcne ne yazd\u0131ysan\u0131z http://127.0.0.1:8000/{yazd\u0131\u011f\u0131n\u0131z_adres}/ adresini a\u00e7\u0131p kontrol edebilirsiniz,\r\nbu ayara hi\u00e7 kar\u0131\u015fmayanlar ise http://127.0.0.1:8000/coogger-images/ adresine gidebilir, sizleri a\u015fa\u011f\u0131daki gibi bir sayfa kar\u015f\u0131layacakt\u0131r.\r\n\r\n<center></center>\r\n\r\n<br>\r\n\r\n> Not;\r\nSadece projenize \u00fcye olmu\u015f ki\u015filer bu servisi kullanarak resim y\u00fckleyebilir, \u00fcye olmayan kullan\u0131c\u0131lar\u0131 login sayfas\u0131na y\u00f6nlendirir, django'nun varsay\u0131lan login adresini kullanm\u0131yorsan\u0131z bunu settings.py'ye yazmay\u0131 unutmay\u0131n."}} |
| parent author | |
| parent permlink | coogger |
| permlink | django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr |
| title | Django Projenize Resim Yükleme Servis Uygulaması Ekleyin - Nasıl Kullanılır ? |
| Transaction Info | Block #33097591/Trx 3353e7d7b8f4c3730262a2899f035519ea0834c9 |
View Raw JSON Data
{
"block": 33097591,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr\">\n\n\n <img alt=\"coogger images\" src=\"https://www.coogger.com/media/images/coogger-images.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"image\", \"coogger\", \"app\", \"cooggerimages\", \"django\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"**s\\u00fcr\\u00fcm V0.0.4**\\r\\n\\r\\n**Konu Ba\\u015fl\\u0131klar\\u0131**\\r\\n\\r\\n[TOC]\\r\\n\\r\\n## \\u0130ndirme / G\\u00fcncelleme\\r\\nBir python paketi oldu\\u011fu i\\u00e7in pip kullanarka rahatl\\u0131kla indirme i\\u015flemini yapabiliriz, a\\u015fa\\u011f\\u0131daki kodlardan size uygun olan\\u0131 pip paket y\\u00f6neticisi y\\u00fckl\\u00fc pc'nizde yazarak i\\u015flemi yapabilirsiniz.\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages\\r\\n```\\r\\nBelirli bir s\\u00fcr\\u00fcm\\u00fc indirmek isterseniz\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages==0.0.4\\r\\n```\\r\\nG\\u00fcncellemek isterseniz\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages -U\\r\\n```\\r\\n\\r\\n## Yap\\u0131land\\u0131rma / Kurulum\\r\\n\\r\\nPaket indirme i\\u015fleminden sonra django projenizin **/settings.py** dosyas\\u0131n\\u0131 a\\u00e7arak `INSTALLED_APPS` k\\u0131sm\\u0131na **cooggerimages** uygulamas\\u0131n\\u0131 ekliyoruz.\\r\\n\\r\\n**/settings.py**\\r\\n```python\\r\\nINSTALLED_APPS = [\\r\\n\\t...,\\r\\n\\t...,\\r\\n\\t...,\\r\\n\\t[\\\"cooggerimages\\\"],\\r\\n]\\r\\n```\\r\\n\\r\\nCooggerimages'\\u0131n varsay\\u0131lan ayarlar\\u0131 bulunmaktad\\u0131r dilerseniz bunlar\\u0131 de\\u011fi\\u015ftirebilirsiniz.\\r\\n\\r\\n```python\\r\\nCOOGGERIMAGES = dict(\\r\\n folder_name=\\\"images/\\\"\\r\\n upload_url=\\\"coogger-images/\\\"\\r\\n upload_url_name=\\\"coogger-images\\\"\\r\\n max_size=4 # MB\\r\\n)\\r\\n```\\r\\nYukar\\u0131daki ayarlar cooggerimages'\\u0131n varsay\\u0131lan ayarlar\\u0131d\\u0131r.\\r\\n\\r\\n- **folder_name**\\r\\nY\\u00fcklenen resimlerin topland\\u0131\\u011f\\u0131 dosyan\\u0131n adresidir.\\r\\n\\r\\n- **upload_url**\\r\\nY\\u00fcklenecek resimlerin internet adresidir, bu adrese get iste\\u011fi gelirse y\\u00fcklenme sayfas\\u0131 a\\u00e7\\u0131l\\u0131r, post iste\\u011fi gelirse resim y\\u00fcklenir.\\r\\n\\r\\n- **upload_url_name**\\r\\nupload_url'\\u0131n ismidir.\\r\\n\\r\\n- **max_size**\\r\\nY\\u00fcklenecek olan resmin MB olarak maximum boyutunu belirler.\\r\\n\\r\\n## Yeni Bir Veri Taban\\u0131\\r\\nE\\u011fer bu uygulama i\\u00e7in yeni bir veri taban\\u0131 kullanmak isterseniz, a\\u015fa\\u011f\\u0131da \\u00f6rnek olarak verece\\u011fim veri taban\\u0131 y\\u00f6nlendiricisini ( router ) kullanabilirsiniz, ama \\u00f6nce\\r\\n\\r\\n**/settings.py** dosyam\\u0131za bunlar\\u0131 eklememiz gerekiyor.\\r\\n```python\\r\\nDATABASES[\\\"coogger_images\\\"] = dict(\\r\\n ENGINE=\\\"django.db.backends.sqlite3\\\",\\r\\n NAME=\\\"coogger_images\\\",\\r\\n)\\r\\n# yukar\\u0131da uygulamam\\u0131z i\\u00e7in yeni bir veri taban\\u0131 ekledik\\r\\n\\r\\nDATABASE_ROUTERS = [\\r\\n \\\"path.to.routers.DBRouter\\\",\\r\\n]\\r\\n# router adresini yazd\\u0131k\\r\\n```\\r\\n\\r\\n**/path.to.routers.py** dosyam\\u0131z\\u0131 a\\u00e7t\\u0131k ve a\\u015fa\\u011f\\u0131daki kodlar\\u0131 yazd\\u0131k.\\r\\n\\r\\n```python\\r\\nclass DBRouter:\\r\\n default_apps = [\\r\\n \\\"admin\\\", \\\"auth\\\",\\r\\n \\\"contenttypes\\\", \\\"sessions\\\", \\\"myapp\\\",\\r\\n ]\\r\\n coogger_images = [\\r\\n \\\"cooggerimages\\\"\\r\\n ]\\r\\n\\r\\n def db_for_read(self, model, **hints):\\r\\n app_label = model._meta.app_label\\r\\n if app_label in self.default_apps:\\r\\n return \\\"default\\\"\\r\\n elif app_label in self.coogger_images:\\r\\n return \\\"coogger_images\\\"\\r\\n\\r\\n def db_for_write(self, model, **hints):\\r\\n return self.db_for_read(model, **hints)\\r\\n\\r\\n def allow_relation(self, obj1, obj2, **hints):\\r\\n return True\\r\\n\\r\\n def allow_migrate(self, db, app_label, model_name=None, **hints):\\r\\n if db == \\\"default\\\":\\r\\n if app_label in self.default_apps:\\r\\n return True\\r\\n elif db == \\\"coogger_images\\\":\\r\\n if app_label in self.coogger_images:\\r\\n return True\\r\\n return False\\r\\n```\\r\\n\\r\\n## Url Konfig\\u00fcrasyonu\\r\\n\\r\\n**/urls.py**\\r\\n\\r\\n```python\\r\\nurlpatterns.append(\\r\\n path(\\\"\\\", include(\\\"cooggerimages.urls\\\")\\r\\n)\\r\\n```\\r\\n\\r\\n## Kontrol Edelim\\r\\n\\r\\n**/settings.py** adresinde `upload_url` b\\u00f6l\\u00fcm\\u00fcne ne yazd\\u0131ysan\\u0131z http://127.0.0.1:8000/{yazd\\u0131\\u011f\\u0131n\\u0131z_adres}/ adresini a\\u00e7\\u0131p kontrol edebilirsiniz,\\r\\nbu ayara hi\\u00e7 kar\\u0131\\u015fmayanlar ise http://127.0.0.1:8000/coogger-images/ adresine gidebilir, sizleri a\\u015fa\\u011f\\u0131daki gibi bir sayfa kar\\u015f\\u0131layacakt\\u0131r.\\r\\n\\r\\n<center></center>\\r\\n\\r\\n<br>\\r\\n\\r\\n> Not;\\r\\nSadece projenize \\u00fcye olmu\\u015f ki\\u015filer bu servisi kullanarak resim y\\u00fckleyebilir, \\u00fcye olmayan kullan\\u0131c\\u0131lar\\u0131 login sayfas\\u0131na y\\u00f6nlendirir, django'nun varsay\\u0131lan login adresini kullanm\\u0131yorsan\\u0131z bunu settings.py'ye yazmay\\u0131 unutmay\\u0131n.\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr",
"title": "Django Projenize Resim Yükleme Servis Uygulaması Ekleyin - Nasıl Kullanılır ?"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:07:30",
"trx_id": "3353e7d7b8f4c3730262a2899f035519ea0834c9",
"trx_in_block": 17,
"virtual_op": false
}hakancelikpublished a new post: django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr2019/05/21 09:01:54
hakancelikpublished a new post: django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr
2019/05/21 09:01:54
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr"> <img alt="coogger images" src="https://www.coogger.com/media/images/coogger-images.png"> </a> <a href="https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["image", "coogger", "app", "cooggerimages", "django"], "app": "coogger/1.7.1", "ecosystem": {"version": "1.7.1", "body": "**s\u00fcr\u00fcm V0.0.3**\r\n\r\n[TOC]\r\n\r\n## \u0130ndirme / G\u00fcncelleme\r\nBir python paketi oldu\u011fu i\u00e7in pip kullanarka rahatl\u0131kla indirme i\u015flemini yapabiliriz, a\u015fa\u011f\u0131daki kodlardan size uygun olan\u0131 pip paket y\u00f6neticisi y\u00fckl\u00fc pc'nizde yazarak i\u015flemi yapabilirsiniz.\r\n\r\n- \r\n```\r\npip install cooggerimages\r\n```\r\nBelirli bir s\u00fcr\u00fcm\u00fc indirmek isterseniz\r\n\r\n- \r\n```\r\npip install cooggerimages==0.0.3\r\n```\r\nG\u00fcncellemek isterseniz\r\n\r\n- \r\n```\r\npip install cooggerimages -U\r\n```\r\n\r\n## Yap\u0131land\u0131rma / Kurulum\r\n\r\nPaket indirme i\u015fleminden sonra django projenizin **/settings.py** dosyas\u0131n\u0131 a\u00e7arak `INSTALLED_APPS` k\u0131sm\u0131na **cooggerimages** uygulamas\u0131n\u0131 ekliyoruz.\r\n\r\n**/settings.py**\r\n```python\r\nINSTALLED_APPS = [\r\n\t...,\r\n\t...,\r\n\t...,\r\n\t[\"cooggerimages\"],\r\n]\r\n```\r\n\r\nCooggerimages'\u0131n varsay\u0131lan ayarlar\u0131 bulunmaktad\u0131r dilerseniz bunlar\u0131 de\u011fi\u015ftirebilirsiniz.\r\n\r\n```python\r\nCOOGGERIMAGES = dict(\r\n folder_name=\"images/\"\r\n upload_url=\"coogger-images/\"\r\n upload_url_name=\"coogger-images\"\r\n max_size=4 # MB\r\n)\r\n```\r\nYukar\u0131daki ayarlar cooggerimages'\u0131n varsay\u0131lan ayarlar\u0131d\u0131r.\r\n\r\n- **folder_name**\r\nY\u00fcklenen resimlerin topland\u0131\u011f\u0131 dosyan\u0131n adresidir.\r\n\r\n- **upload_url**\r\nY\u00fcklenecek resimlerin internet adresidir, bu adrese get iste\u011fi gelirse y\u00fcklenme sayfas\u0131 a\u00e7\u0131l\u0131r, post iste\u011fi gelirse resim y\u00fcklenir.\r\n\r\n- **upload_url_name**\r\nupload_url'\u0131n ismidir.\r\n\r\n- **max_size**\r\nY\u00fcklenecek olan resmin MB olarak maximum boyutunu belirler.\r\n\r\n## Yeni Bir Veri Taban\u0131\r\nE\u011fer bu uygulama i\u00e7in yeni bir veri taban\u0131 kullanmak isterseniz, a\u015fa\u011f\u0131da \u00f6rnek olarak verece\u011fim veri taban\u0131 y\u00f6nlendiricisini ( router ) kullanabilirsiniz, ama \u00f6nce\r\n\r\n**/settings.py** dosyam\u0131za bunlar\u0131 eklememiz gerekiyor.\r\n```python\r\nDATABASES[\"coogger_images\"] = dict(\r\n ENGINE=\"django.db.backends.sqlite3\",\r\n NAME=\"coogger_images\",\r\n)\r\n# yukar\u0131da uygulamam\u0131z i\u00e7in yeni bir veri taban\u0131 ekledik\r\n\r\nDATABASE_ROUTERS = [\r\n \"path.to.routers.DBRouter\",\r\n]\r\n# router adresini yazd\u0131k\r\n```\r\n\r\n**/path.to.routers.py** dosyam\u0131z\u0131 a\u00e7t\u0131k ve a\u015fa\u011f\u0131daki kodlar\u0131 yazd\u0131k.\r\n\r\n```python\r\nclass DBRouter:\r\n default_apps = [\r\n \"admin\", \"auth\",\r\n \"contenttypes\", \"sessions\", \"myapp\",\r\n ]\r\n coogger_images = [\r\n \"cooggerimages\"\r\n ]\r\n\r\n def db_for_read(self, model, **hints):\r\n app_label = model._meta.app_label\r\n if app_label in self.default_apps:\r\n return \"default\"\r\n elif app_label in self.coogger_images:\r\n return \"coogger_images\"\r\n\r\n def db_for_write(self, model, **hints):\r\n return self.db_for_read(model, **hints)\r\n\r\n def allow_relation(self, obj1, obj2, **hints):\r\n return True\r\n\r\n def allow_migrate(self, db, app_label, model_name=None, **hints):\r\n if db == \"default\":\r\n if app_label in self.default_apps:\r\n return True\r\n elif db == \"coogger_images\":\r\n if app_label in self.coogger_images:\r\n return True\r\n return False\r\n```\r\n\r\n## Url Konfig\u00fcrasyonu\r\n\r\n**/urls.py**\r\n\r\n```python\r\nurlpatterns.append(\r\n path(\"\", include(\"cooggerimages.urls\")\r\n)\r\n```\r\n\r\n## Kontrol Edelim\r\n\r\n**/settings.py** adresinde `upload_url` b\u00f6l\u00fcm\u00fcne ne yazd\u0131ysan\u0131z http://127.0.0.1:8000/{yazd\u0131\u011f\u0131n\u0131z_adres}/ adresini a\u00e7\u0131p kontrol edebilirsiniz,\r\nbu ayara hi\u00e7 kar\u0131\u015fmayanlar ise http://127.0.0.1:8000/coogger-images/ adresine gidebilir, sizleri a\u015fa\u011f\u0131daki gibi bir sayfa kar\u015f\u0131layacakt\u0131r.\r\n\r\n<center></center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr |
| title | Django Projenize Resim Yükleme Servis Uygulaması Ekleyin - Nasıl Kullanılır ? |
| Transaction Info | Block #33097479/Trx 844ef3ab08215fd343704ed15cba66c9e3bcbcc6 |
View Raw JSON Data
{
"block": 33097479,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr\">\n\n\n <img alt=\"coogger images\" src=\"https://www.coogger.com/media/images/coogger-images.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"image\", \"coogger\", \"app\", \"cooggerimages\", \"django\"], \"app\": \"coogger/1.7.1\", \"ecosystem\": {\"version\": \"1.7.1\", \"body\": \"**s\\u00fcr\\u00fcm V0.0.3**\\r\\n\\r\\n[TOC]\\r\\n\\r\\n## \\u0130ndirme / G\\u00fcncelleme\\r\\nBir python paketi oldu\\u011fu i\\u00e7in pip kullanarka rahatl\\u0131kla indirme i\\u015flemini yapabiliriz, a\\u015fa\\u011f\\u0131daki kodlardan size uygun olan\\u0131 pip paket y\\u00f6neticisi y\\u00fckl\\u00fc pc'nizde yazarak i\\u015flemi yapabilirsiniz.\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages\\r\\n```\\r\\nBelirli bir s\\u00fcr\\u00fcm\\u00fc indirmek isterseniz\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages==0.0.3\\r\\n```\\r\\nG\\u00fcncellemek isterseniz\\r\\n\\r\\n- \\r\\n```\\r\\npip install cooggerimages -U\\r\\n```\\r\\n\\r\\n## Yap\\u0131land\\u0131rma / Kurulum\\r\\n\\r\\nPaket indirme i\\u015fleminden sonra django projenizin **/settings.py** dosyas\\u0131n\\u0131 a\\u00e7arak `INSTALLED_APPS` k\\u0131sm\\u0131na **cooggerimages** uygulamas\\u0131n\\u0131 ekliyoruz.\\r\\n\\r\\n**/settings.py**\\r\\n```python\\r\\nINSTALLED_APPS = [\\r\\n\\t...,\\r\\n\\t...,\\r\\n\\t...,\\r\\n\\t[\\\"cooggerimages\\\"],\\r\\n]\\r\\n```\\r\\n\\r\\nCooggerimages'\\u0131n varsay\\u0131lan ayarlar\\u0131 bulunmaktad\\u0131r dilerseniz bunlar\\u0131 de\\u011fi\\u015ftirebilirsiniz.\\r\\n\\r\\n```python\\r\\nCOOGGERIMAGES = dict(\\r\\n folder_name=\\\"images/\\\"\\r\\n upload_url=\\\"coogger-images/\\\"\\r\\n upload_url_name=\\\"coogger-images\\\"\\r\\n max_size=4 # MB\\r\\n)\\r\\n```\\r\\nYukar\\u0131daki ayarlar cooggerimages'\\u0131n varsay\\u0131lan ayarlar\\u0131d\\u0131r.\\r\\n\\r\\n- **folder_name**\\r\\nY\\u00fcklenen resimlerin topland\\u0131\\u011f\\u0131 dosyan\\u0131n adresidir.\\r\\n\\r\\n- **upload_url**\\r\\nY\\u00fcklenecek resimlerin internet adresidir, bu adrese get iste\\u011fi gelirse y\\u00fcklenme sayfas\\u0131 a\\u00e7\\u0131l\\u0131r, post iste\\u011fi gelirse resim y\\u00fcklenir.\\r\\n\\r\\n- **upload_url_name**\\r\\nupload_url'\\u0131n ismidir.\\r\\n\\r\\n- **max_size**\\r\\nY\\u00fcklenecek olan resmin MB olarak maximum boyutunu belirler.\\r\\n\\r\\n## Yeni Bir Veri Taban\\u0131\\r\\nE\\u011fer bu uygulama i\\u00e7in yeni bir veri taban\\u0131 kullanmak isterseniz, a\\u015fa\\u011f\\u0131da \\u00f6rnek olarak verece\\u011fim veri taban\\u0131 y\\u00f6nlendiricisini ( router ) kullanabilirsiniz, ama \\u00f6nce\\r\\n\\r\\n**/settings.py** dosyam\\u0131za bunlar\\u0131 eklememiz gerekiyor.\\r\\n```python\\r\\nDATABASES[\\\"coogger_images\\\"] = dict(\\r\\n ENGINE=\\\"django.db.backends.sqlite3\\\",\\r\\n NAME=\\\"coogger_images\\\",\\r\\n)\\r\\n# yukar\\u0131da uygulamam\\u0131z i\\u00e7in yeni bir veri taban\\u0131 ekledik\\r\\n\\r\\nDATABASE_ROUTERS = [\\r\\n \\\"path.to.routers.DBRouter\\\",\\r\\n]\\r\\n# router adresini yazd\\u0131k\\r\\n```\\r\\n\\r\\n**/path.to.routers.py** dosyam\\u0131z\\u0131 a\\u00e7t\\u0131k ve a\\u015fa\\u011f\\u0131daki kodlar\\u0131 yazd\\u0131k.\\r\\n\\r\\n```python\\r\\nclass DBRouter:\\r\\n default_apps = [\\r\\n \\\"admin\\\", \\\"auth\\\",\\r\\n \\\"contenttypes\\\", \\\"sessions\\\", \\\"myapp\\\",\\r\\n ]\\r\\n coogger_images = [\\r\\n \\\"cooggerimages\\\"\\r\\n ]\\r\\n\\r\\n def db_for_read(self, model, **hints):\\r\\n app_label = model._meta.app_label\\r\\n if app_label in self.default_apps:\\r\\n return \\\"default\\\"\\r\\n elif app_label in self.coogger_images:\\r\\n return \\\"coogger_images\\\"\\r\\n\\r\\n def db_for_write(self, model, **hints):\\r\\n return self.db_for_read(model, **hints)\\r\\n\\r\\n def allow_relation(self, obj1, obj2, **hints):\\r\\n return True\\r\\n\\r\\n def allow_migrate(self, db, app_label, model_name=None, **hints):\\r\\n if db == \\\"default\\\":\\r\\n if app_label in self.default_apps:\\r\\n return True\\r\\n elif db == \\\"coogger_images\\\":\\r\\n if app_label in self.coogger_images:\\r\\n return True\\r\\n return False\\r\\n```\\r\\n\\r\\n## Url Konfig\\u00fcrasyonu\\r\\n\\r\\n**/urls.py**\\r\\n\\r\\n```python\\r\\nurlpatterns.append(\\r\\n path(\\\"\\\", include(\\\"cooggerimages.urls\\\")\\r\\n)\\r\\n```\\r\\n\\r\\n## Kontrol Edelim\\r\\n\\r\\n**/settings.py** adresinde `upload_url` b\\u00f6l\\u00fcm\\u00fcne ne yazd\\u0131ysan\\u0131z http://127.0.0.1:8000/{yazd\\u0131\\u011f\\u0131n\\u0131z_adres}/ adresini a\\u00e7\\u0131p kontrol edebilirsiniz,\\r\\nbu ayara hi\\u00e7 kar\\u0131\\u015fmayanlar ise http://127.0.0.1:8000/coogger-images/ adresine gidebilir, sizleri a\\u015fa\\u011f\\u0131daki gibi bir sayfa kar\\u015f\\u0131layacakt\\u0131r.\\r\\n\\r\\n<center></center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr",
"title": "Django Projenize Resim Yükleme Servis Uygulaması Ekleyin - Nasıl Kullanılır ?"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-21T09:01:54",
"trx_id": "844ef3ab08215fd343704ed15cba66c9e3bcbcc6",
"trx_in_block": 34,
"virtual_op": false
}2019/05/20 19:05:51
2019/05/20 19:05:51
| author | hakancelik |
| permlink | django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr |
| Transaction Info | Block #33080769/Virtual Operation 4294967295:10 |
View Raw JSON Data
{
"block": 33080769,
"op": [
"comment_payout_update",
{
"author": "hakancelik",
"permlink": "django-projenize-resim-yukleme-servis-uygulamas-ekleyin-nasl-kullanlr"
}
],
"op_in_trx": 10,
"timestamp": "2019-05-20T19:05:51",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hakancelikupdated payout for coogger-images-nedir2019/05/20 18:19:27
hakancelikupdated payout for coogger-images-nedir
2019/05/20 18:19:27
| author | hakancelik |
| permlink | coogger-images-nedir |
| Transaction Info | Block #33079841/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"block": 33079841,
"op": [
"comment_payout_update",
{
"author": "hakancelik",
"permlink": "coogger-images-nedir"
}
],
"op_in_trx": 5,
"timestamp": "2019-05-20T18:19:27",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": true
}hozn4ukhlytriwcupvoted (15.00%) @hakancelik / pyttsx-text-to-speech-kurulumu2019/05/20 02:31:48
hozn4ukhlytriwcupvoted (15.00%) @hakancelik / pyttsx-text-to-speech-kurulumu
2019/05/20 02:31:48
| author | hakancelik |
| permlink | pyttsx-text-to-speech-kurulumu |
| voter | hozn4ukhlytriwc |
| weight | 1500 (15.00%) |
| Transaction Info | Block #33060903/Trx 69e4cec09a86a8da1b9545b34dda9cc32077f22c |
View Raw JSON Data
{
"block": 33060903,
"op": [
"vote",
{
"author": "hakancelik",
"permlink": "pyttsx-text-to-speech-kurulumu",
"voter": "hozn4ukhlytriwc",
"weight": 1500
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:31:48",
"trx_id": "69e4cec09a86a8da1b9545b34dda9cc32077f22c",
"trx_in_block": 23,
"virtual_op": false
}2019/05/20 02:15:21
2019/05/20 02:15:21
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content"> <img alt="" src="https://www.coogger.com/media/images/coogger.png"> </a> <a href="https://www.coogger.com/@hakancelik/if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "utopian-io", "coogger-python", "python", "tutorial"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "<img general=\"center\" src=\"https://www.coogger.com/media/images/coogger.png\">\r\n\r\n\r\n#### Repositories\r\n- https://github.com/coogger/coogger\r\n- https://github.com/coogger/coogger-python\r\n- https://github.com/steem/steem-python\r\n\r\n#### What Will I Learn?\r\nIn this tutorial, we will calculate the total power of the users who login coogger.com, where we will find the maximum value that we can have on the curation trail, therefore, we will find the maximum value that we can have in the curation trail.\r\n\r\n- You will learn to get users from coogger.com with coogger-python\r\n- You will learn to calculate the users voting value with steem-python\r\n\r\n#### Requirements\r\n- Python 3.6\r\n- steem-python\r\n- coogger-python\r\n\r\n#### Difficulty\r\n- Intermediate\r\n\r\n#### Tutorial Contents\r\nMake sure that all the required libraries are installed correctly before you begin.\r\nLet's first write a function that calculates the vote value.\r\n\r\nIt is necessary to inform a few subjects before starting.\r\n\r\n#### What is coogger.up?\r\n##### Github:\r\nhttps://github.com/coogger/coogger.up\r\nCoogger.up is a upvote bot for the coogger ecosystem.\r\n\r\n> When shared any content any communities on coogger and if it gets approved from coogger ( or other communities moderators) moderators, users will get upvotes from users that have allowed cooggerup settings in the settings section.\r\n\r\n#### How to join curation trail of coogger.up bot\r\n- [Click on coogger ecosystem login address](https://www.coogger.com/account/login)\r\n\r\n- [Open settings section with click address](https://www.coogger.com/settings/)\r\n\r\n- Check the box and set the percentage, you can see a sample participation below\r\n\r\n<img general=\"center\" src=\"https://www.coogger.com/media/images/coogger-settings.png\">\r\n\r\n#### How to calculate vote value?\r\nIn short, it can be calculated using a formula such as\r\n\r\n`rshares * reward_share * price_of_steem`\r\n\r\nWe include the required classes and libraries in our project.\r\n\r\n<img general=\"center br-4\" src=\"https://steemitimages.com/0x0/https://cdn.discordapp.com/attachments/443888140323913728/458311414650765313/steempython.png\">\r\n\r\n```python\r\nfrom steem import Steem\r\nfrom steem.amount import Amount\r\nfrom steem.account import Account\r\nfrom steem.converter import Converter\r\n```\r\nOur function name is **get_vote_value** and it receive two parameters.\r\n> - username\r\n> - weight / 0 to 100\r\n\r\nLet's call our steem class to take account and reward_fund information, it should be as follows.\r\n\r\n```python\r\nsteem = Steem()\r\naccount = steem.get_account(username)\r\nreward_fund = steem.get_reward_fund()\r\n```\r\n\r\nLet's calculate **reward_share.**\r\n\r\n```python\r\nrecent_claims = reward_fund[\"recent_claims\"]\r\nreward_balance = Amount(reward_fund[\"reward_balance\"]).amount\r\nreward_share = reward_balance / float(recent_claims)\r\n```\r\n\r\nSecond let's take **price_of_steem** value\r\n\r\n```python\r\nprice_of_steem = Amount(steem.get_current_median_history_price()[\"base\"]).amount\r\n```\r\n\r\nAnd finally, let's calculate total **rshares**\r\n\r\n```python\r\nvests = Amount(account['vesting_shares']).amount\r\ndelegated_vests = Amount(account['delegated_vesting_shares']).amount\r\nreceived_vests = Amount(account['received_vesting_shares']).amount\r\ncurrent_vests = float(vests) - float(delegated_vests) + float(received_vests)\r\nconvert = Converter()\r\nsteem_power = convert.vests_to_sp(current_vests)\r\nrshares = convert.sp_to_rshares(sp=steem_power, vote_pct=weight*100)\r\n```\r\n-------------\r\n#### Final state of function.\r\n\r\n***projects/utils.py***\r\n\r\n```python\r\nfrom steem import Steem\r\nfrom steem.amount import Amount\r\nfrom steem.account import Account\r\nfrom steem.converter import Converter\r\n\r\ndef get_vote_value(username, weight=100):\r\n steem = Steem()\r\n account = steem.get_account(username)\r\n reward_fund = steem.get_reward_fund()\r\n recent_claims = reward_fund[\"recent_claims\"]\r\n reward_balance = Amount(reward_fund[\"reward_balance\"]).amount\r\n reward_share = reward_balance / float(recent_claims)\r\n price_of_steem = Amount(steem.get_current_median_history_price()[\"base\"]).amount\r\n vests = Amount(account['vesting_shares']).amount\r\n delegated_vests = Amount(account['delegated_vesting_shares']).amount\r\n received_vests = Amount(account['received_vesting_shares']).amount\r\n current_vests = float(vests) - float(delegated_vests) + float(received_vests)\r\n convert = Converter()\r\n steem_power = convert.vests_to_sp(current_vests)\r\n rshares = convert.sp_to_rshares(sp=steem_power, vote_pct=weight*100)\r\n return round(rshares * reward_share * price_of_steem, 4)\r\n```\r\n\r\n------------------\r\n**Now let's write our second function named get_users**\r\n> This function will take all users who have login coogger.com.\r\n\r\nWe included the required class in the project and this function receive one parameter name **api_key**.\r\n\r\n##### Note :\r\nThe api_key is a key required to access the coogger data and can only be given to the administrator.\r\n\r\nsoon I will set the public key.\r\n> api_key is set to \"api_key\" on the local computer.\r\n\r\n***projects/project.py***\r\n\r\n```python\r\nfrom coogger.user import UserFilterApi\r\nfrom utils import get_vote_value\r\n```\r\n\r\nThere are description availables in codes.\r\n\r\n```python\r\ndef get_users(api_key=\"api_key\"):\r\n user_filter_api = UserFilterApi(api_key)\r\n\t# We connection the coogger with api key.\r\n while True:\r\n\t # We create the loop to receive other pages data\r\n user_filter_api.filter()\r\n\t\t# The empty filter allows us to get all users data.\r\n users = user_filter_api.results\r\n\t\t# we got user data.\r\n next_page = user_filter_api.next\r\n\t\t# we got the next page data, and if there is no next page, it returns None.\r\n for user in users:\r\n yield user.username\r\n\t\t\t# return username of users\r\n if next_page:\r\n\t\t # if next page already axist,\r\n user_filter_api.node = next_page\r\n\t\t\t# We must change the node with next_page data\r\n else:\r\n\t\t # if next page doesn't exist, we must break the while lood\r\n break\r\n\r\n\r\nif __name__ == '__main__':\r\n\ttotal_vote_value = 0\r\n\tfor username in get_users():\r\n\t\tvote_value = get_vote_value(username)\r\n\t\tprint(f\"@{username} >> {vote_value}\")\r\n\t\ttotal_vote_value += vote_value\r\n\tprint(\"total_vote_value >> :\",total_vote_value)\r\n```\r\n\r\n### Result :\r\n\r\n| Username | Vote Value |\r\n| :------------: | :------------: |\r\n|@hakancelik | $0.0165|\r\n|@ibrahimsmngl | $0.0007|\r\n|@postdestek | $0.0007|\r\n|@pars11 | $0.0187|\r\n|@coogger | $0.0025|\r\n|@haikalisifa | $0.0006|\r\n|@efsane60 | $0.0037|\r\n|@yataydeli | $0.0027|\r\n|@steemit-turkey | $0.0626|\r\n|@alisari | $0.0006|\r\n|@bkatipoglu1 | $0.0007|\r\n|@lutfibasdas | $0.0007|\r\n|@sorucevap | $0.0064|\r\n|@baristutakli | $0.0002|\r\n|@kompela14 | $0.0139|\r\n|@dangerux | $0.0029|\r\n|@saiddemir | $0.0002|\r\n|@lastozgur | $0.0055|\r\n|@juanunix | $0.0007|\r\n|@abasifreke | $0.007|\r\n|@captainsailor | $0.0028|\r\n|@ugurarslanboga | $0.0019|\r\n|@wisex | $0.0004|\r\n|@famil | $0.0021|\r\n|@burakdogusoy | $0.0042|\r\n|@ms10398 | $0.027|\r\n|@gokhan83kurt | $0.0313|\r\n|@varolleng | $0.0007|\r\n|@tykee | $0.0158|\r\n|@hasiz | $0.0007|\r\n|@ilkeryilmaz | $0.0011|\r\n|@teaminfo | $0.0019|\r\n|@sedatcelik | $0.0015|\r\n|@amico | $0.0095|\r\n|@hsynterkr | $0.0386|\r\n|@pamukcu12 | $0.0016|\r\n|@batuhoca | $0.0021|\r\n|@trbtc | $0.0022|\r\n|@ewuoso | $0.004|\r\n|@itsravi | $0.0037|\r\n|@vmirag | $0.0041|\r\n|@onderakcaalan | $0.0051|\r\n|@windofrebel | $0.0007|\r\n|@ruen | $0.0036|\r\n|@lightshield | $0.002|\r\n|@eyupyusuf | $0.0009|\r\n|@kagantrky | $0.0092|\r\n|@mahsumclkblk | $0.0007|\r\n|@damla | $0.0208|\r\n|@burcunurdogusoy | $0.0007|\r\n|@freetissues | $0.0266|\r\n|@alfromswarm | $0.0007|\r\n|@blingtendo | $0.0021|\r\n|@rishi556 | $0.0422|\r\n|@steemkitchen | $0.0894|\r\n|@gilabola.mania | $0.0007|\r\n|@albertocotua | $0.0019|\r\n|@bahagia-arbi | $0.0316|\r\n|@mrchef111 | $0.0385|\r\n|@dragraff | $0.0038|\r\n|@mrscwin | $0.0007|\r\n|@lizelle | $0.0314|\r\n|@bitbase | $0.001|\r\n|@braaiboy | $0.037|\r\n|@joyrobinson | $0.0069|\r\n|@avizor | $0.0269|\r\n|@greatwarrior79 | $0.0019|\r\n|@coogger.wallet | $0.0002|\r\n|@coogger.pay | $0.0001|\r\n|@ngocbich | $0.0042|\r\n|@princessmewmew | $0.2384|\r\n|@sigilmancy | $0.0017|\r\n|@kamtasia | $0.0007|\r\n|@chris.geese | $0.0007|\r\n|@immanuel94 | $0.1555|\r\n|@bozz | $0.0335|\r\n|@murattatar | $0.0408|\r\n|@thomaskatan | $0.0027|\r\n|@mehmetcelik | $0.0001|\r\n|@hendersonp | $0.0172|\r\n|@verhp11 | $0.0393|\r\n|@jesse5th | $0.0|\r\n|@kantzone | $0.0007|\r\n|@drsensor | $0.0049|\r\n|@enisshkurti | $0.0433|\r\n|@sinzzer | $0.0274|\r\n|total_vote_value | $1.3031000000000001|\r\n\r\n---------------\r\n**As you can see, if all users who login coogger.com join in coogger.up's curation trail, they can get a prize of $1.3.**\r\n\r\n<center> **Thank you for reading** </center>\r\n\r\n#### Proof of Work Done\r\n- Project.py > https://gist.github.com/hakancelik96/9ed00855a985421f8d88e76ad398fb99\r\n- Utils.py > https://gist.github.com/hakancelik96/e5ad4dc64d4c5cddc4ef5cb61d060f4c"}} |
| parent author | |
| parent permlink | coogger |
| permlink | if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content |
| title | If Everyone Who Login Coogger Join in the Curation Trail of Coogger.up | How Much is the Reward Per Content? |
| Transaction Info | Block #33060574/Trx 2e44eb12b956c267edced9c04dedc704f5c5e8b8 |
View Raw JSON Data
{
"block": 33060574,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/coogger.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"utopian-io\", \"coogger-python\", \"python\", \"tutorial\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"<img general=\\\"center\\\" src=\\\"https://www.coogger.com/media/images/coogger.png\\\">\\r\\n\\r\\n\\r\\n#### Repositories\\r\\n- https://github.com/coogger/coogger\\r\\n- https://github.com/coogger/coogger-python\\r\\n- https://github.com/steem/steem-python\\r\\n\\r\\n#### What Will I Learn?\\r\\nIn this tutorial, we will calculate the total power of the users who login coogger.com, where we will find the maximum value that we can have on the curation trail, therefore, we will find the maximum value that we can have in the curation trail.\\r\\n\\r\\n- You will learn to get users from coogger.com with coogger-python\\r\\n- You will learn to calculate the users voting value with steem-python\\r\\n\\r\\n#### Requirements\\r\\n- Python 3.6\\r\\n- steem-python\\r\\n- coogger-python\\r\\n\\r\\n#### Difficulty\\r\\n- Intermediate\\r\\n\\r\\n#### Tutorial Contents\\r\\nMake sure that all the required libraries are installed correctly before you begin.\\r\\nLet's first write a function that calculates the vote value.\\r\\n\\r\\nIt is necessary to inform a few subjects before starting.\\r\\n\\r\\n#### What is coogger.up?\\r\\n##### Github:\\r\\nhttps://github.com/coogger/coogger.up\\r\\nCoogger.up is a upvote bot for the coogger ecosystem.\\r\\n\\r\\n> When shared any content any communities on coogger and if it gets approved from coogger ( or other communities moderators) moderators, users will get upvotes from users that have allowed cooggerup settings in the settings section.\\r\\n\\r\\n#### How to join curation trail of coogger.up bot\\r\\n- [Click on coogger ecosystem login address](https://www.coogger.com/account/login)\\r\\n\\r\\n- [Open settings section with click address](https://www.coogger.com/settings/)\\r\\n\\r\\n- Check the box and set the percentage, you can see a sample participation below\\r\\n\\r\\n<img general=\\\"center\\\" src=\\\"https://www.coogger.com/media/images/coogger-settings.png\\\">\\r\\n\\r\\n#### How to calculate vote value?\\r\\nIn short, it can be calculated using a formula such as\\r\\n\\r\\n`rshares * reward_share * price_of_steem`\\r\\n\\r\\nWe include the required classes and libraries in our project.\\r\\n\\r\\n<img general=\\\"center br-4\\\" src=\\\"https://steemitimages.com/0x0/https://cdn.discordapp.com/attachments/443888140323913728/458311414650765313/steempython.png\\\">\\r\\n\\r\\n```python\\r\\nfrom steem import Steem\\r\\nfrom steem.amount import Amount\\r\\nfrom steem.account import Account\\r\\nfrom steem.converter import Converter\\r\\n```\\r\\nOur function name is **get_vote_value** and it receive two parameters.\\r\\n> - username\\r\\n> - weight / 0 to 100\\r\\n\\r\\nLet's call our steem class to take account and reward_fund information, it should be as follows.\\r\\n\\r\\n```python\\r\\nsteem = Steem()\\r\\naccount = steem.get_account(username)\\r\\nreward_fund = steem.get_reward_fund()\\r\\n```\\r\\n\\r\\nLet's calculate **reward_share.**\\r\\n\\r\\n```python\\r\\nrecent_claims = reward_fund[\\\"recent_claims\\\"]\\r\\nreward_balance = Amount(reward_fund[\\\"reward_balance\\\"]).amount\\r\\nreward_share = reward_balance / float(recent_claims)\\r\\n```\\r\\n\\r\\nSecond let's take **price_of_steem** value\\r\\n\\r\\n```python\\r\\nprice_of_steem = Amount(steem.get_current_median_history_price()[\\\"base\\\"]).amount\\r\\n```\\r\\n\\r\\nAnd finally, let's calculate total **rshares**\\r\\n\\r\\n```python\\r\\nvests = Amount(account['vesting_shares']).amount\\r\\ndelegated_vests = Amount(account['delegated_vesting_shares']).amount\\r\\nreceived_vests = Amount(account['received_vesting_shares']).amount\\r\\ncurrent_vests = float(vests) - float(delegated_vests) + float(received_vests)\\r\\nconvert = Converter()\\r\\nsteem_power = convert.vests_to_sp(current_vests)\\r\\nrshares = convert.sp_to_rshares(sp=steem_power, vote_pct=weight*100)\\r\\n```\\r\\n-------------\\r\\n#### Final state of function.\\r\\n\\r\\n***projects/utils.py***\\r\\n\\r\\n```python\\r\\nfrom steem import Steem\\r\\nfrom steem.amount import Amount\\r\\nfrom steem.account import Account\\r\\nfrom steem.converter import Converter\\r\\n\\r\\ndef get_vote_value(username, weight=100):\\r\\n steem = Steem()\\r\\n account = steem.get_account(username)\\r\\n reward_fund = steem.get_reward_fund()\\r\\n recent_claims = reward_fund[\\\"recent_claims\\\"]\\r\\n reward_balance = Amount(reward_fund[\\\"reward_balance\\\"]).amount\\r\\n reward_share = reward_balance / float(recent_claims)\\r\\n price_of_steem = Amount(steem.get_current_median_history_price()[\\\"base\\\"]).amount\\r\\n vests = Amount(account['vesting_shares']).amount\\r\\n delegated_vests = Amount(account['delegated_vesting_shares']).amount\\r\\n received_vests = Amount(account['received_vesting_shares']).amount\\r\\n current_vests = float(vests) - float(delegated_vests) + float(received_vests)\\r\\n convert = Converter()\\r\\n steem_power = convert.vests_to_sp(current_vests)\\r\\n rshares = convert.sp_to_rshares(sp=steem_power, vote_pct=weight*100)\\r\\n return round(rshares * reward_share * price_of_steem, 4)\\r\\n```\\r\\n\\r\\n------------------\\r\\n**Now let's write our second function named get_users**\\r\\n> This function will take all users who have login coogger.com.\\r\\n\\r\\nWe included the required class in the project and this function receive one parameter name **api_key**.\\r\\n\\r\\n##### Note :\\r\\nThe api_key is a key required to access the coogger data and can only be given to the administrator.\\r\\n\\r\\nsoon I will set the public key.\\r\\n> api_key is set to \\\"api_key\\\" on the local computer.\\r\\n\\r\\n***projects/project.py***\\r\\n\\r\\n```python\\r\\nfrom coogger.user import UserFilterApi\\r\\nfrom utils import get_vote_value\\r\\n```\\r\\n\\r\\nThere are description availables in codes.\\r\\n\\r\\n```python\\r\\ndef get_users(api_key=\\\"api_key\\\"):\\r\\n user_filter_api = UserFilterApi(api_key)\\r\\n\\t# We connection the coogger with api key.\\r\\n while True:\\r\\n\\t # We create the loop to receive other pages data\\r\\n user_filter_api.filter()\\r\\n\\t\\t# The empty filter allows us to get all users data.\\r\\n users = user_filter_api.results\\r\\n\\t\\t# we got user data.\\r\\n next_page = user_filter_api.next\\r\\n\\t\\t# we got the next page data, and if there is no next page, it returns None.\\r\\n for user in users:\\r\\n yield user.username\\r\\n\\t\\t\\t# return username of users\\r\\n if next_page:\\r\\n\\t\\t # if next page already axist,\\r\\n user_filter_api.node = next_page\\r\\n\\t\\t\\t# We must change the node with next_page data\\r\\n else:\\r\\n\\t\\t # if next page doesn't exist, we must break the while lood\\r\\n break\\r\\n\\r\\n\\r\\nif __name__ == '__main__':\\r\\n\\ttotal_vote_value = 0\\r\\n\\tfor username in get_users():\\r\\n\\t\\tvote_value = get_vote_value(username)\\r\\n\\t\\tprint(f\\\"@{username} >> {vote_value}\\\")\\r\\n\\t\\ttotal_vote_value += vote_value\\r\\n\\tprint(\\\"total_vote_value >> :\\\",total_vote_value)\\r\\n```\\r\\n\\r\\n### Result :\\r\\n\\r\\n| Username | Vote Value |\\r\\n| :------------: | :------------: |\\r\\n|@hakancelik | $0.0165|\\r\\n|@ibrahimsmngl | $0.0007|\\r\\n|@postdestek | $0.0007|\\r\\n|@pars11 | $0.0187|\\r\\n|@coogger | $0.0025|\\r\\n|@haikalisifa | $0.0006|\\r\\n|@efsane60 | $0.0037|\\r\\n|@yataydeli | $0.0027|\\r\\n|@steemit-turkey | $0.0626|\\r\\n|@alisari | $0.0006|\\r\\n|@bkatipoglu1 | $0.0007|\\r\\n|@lutfibasdas | $0.0007|\\r\\n|@sorucevap | $0.0064|\\r\\n|@baristutakli | $0.0002|\\r\\n|@kompela14 | $0.0139|\\r\\n|@dangerux | $0.0029|\\r\\n|@saiddemir | $0.0002|\\r\\n|@lastozgur | $0.0055|\\r\\n|@juanunix | $0.0007|\\r\\n|@abasifreke | $0.007|\\r\\n|@captainsailor | $0.0028|\\r\\n|@ugurarslanboga | $0.0019|\\r\\n|@wisex | $0.0004|\\r\\n|@famil | $0.0021|\\r\\n|@burakdogusoy | $0.0042|\\r\\n|@ms10398 | $0.027|\\r\\n|@gokhan83kurt | $0.0313|\\r\\n|@varolleng | $0.0007|\\r\\n|@tykee | $0.0158|\\r\\n|@hasiz | $0.0007|\\r\\n|@ilkeryilmaz | $0.0011|\\r\\n|@teaminfo | $0.0019|\\r\\n|@sedatcelik | $0.0015|\\r\\n|@amico | $0.0095|\\r\\n|@hsynterkr | $0.0386|\\r\\n|@pamukcu12 | $0.0016|\\r\\n|@batuhoca | $0.0021|\\r\\n|@trbtc | $0.0022|\\r\\n|@ewuoso | $0.004|\\r\\n|@itsravi | $0.0037|\\r\\n|@vmirag | $0.0041|\\r\\n|@onderakcaalan | $0.0051|\\r\\n|@windofrebel | $0.0007|\\r\\n|@ruen | $0.0036|\\r\\n|@lightshield | $0.002|\\r\\n|@eyupyusuf | $0.0009|\\r\\n|@kagantrky | $0.0092|\\r\\n|@mahsumclkblk | $0.0007|\\r\\n|@damla | $0.0208|\\r\\n|@burcunurdogusoy | $0.0007|\\r\\n|@freetissues | $0.0266|\\r\\n|@alfromswarm | $0.0007|\\r\\n|@blingtendo | $0.0021|\\r\\n|@rishi556 | $0.0422|\\r\\n|@steemkitchen | $0.0894|\\r\\n|@gilabola.mania | $0.0007|\\r\\n|@albertocotua | $0.0019|\\r\\n|@bahagia-arbi | $0.0316|\\r\\n|@mrchef111 | $0.0385|\\r\\n|@dragraff | $0.0038|\\r\\n|@mrscwin | $0.0007|\\r\\n|@lizelle | $0.0314|\\r\\n|@bitbase | $0.001|\\r\\n|@braaiboy | $0.037|\\r\\n|@joyrobinson | $0.0069|\\r\\n|@avizor | $0.0269|\\r\\n|@greatwarrior79 | $0.0019|\\r\\n|@coogger.wallet | $0.0002|\\r\\n|@coogger.pay | $0.0001|\\r\\n|@ngocbich | $0.0042|\\r\\n|@princessmewmew | $0.2384|\\r\\n|@sigilmancy | $0.0017|\\r\\n|@kamtasia | $0.0007|\\r\\n|@chris.geese | $0.0007|\\r\\n|@immanuel94 | $0.1555|\\r\\n|@bozz | $0.0335|\\r\\n|@murattatar | $0.0408|\\r\\n|@thomaskatan | $0.0027|\\r\\n|@mehmetcelik | $0.0001|\\r\\n|@hendersonp | $0.0172|\\r\\n|@verhp11 | $0.0393|\\r\\n|@jesse5th | $0.0|\\r\\n|@kantzone | $0.0007|\\r\\n|@drsensor | $0.0049|\\r\\n|@enisshkurti | $0.0433|\\r\\n|@sinzzer | $0.0274|\\r\\n|total_vote_value | $1.3031000000000001|\\r\\n\\r\\n---------------\\r\\n**As you can see, if all users who login coogger.com join in coogger.up's curation trail, they can get a prize of $1.3.**\\r\\n\\r\\n<center> **Thank you for reading** </center>\\r\\n\\r\\n#### Proof of Work Done\\r\\n- Project.py > https://gist.github.com/hakancelik96/9ed00855a985421f8d88e76ad398fb99\\r\\n- Utils.py > https://gist.github.com/hakancelik96/e5ad4dc64d4c5cddc4ef5cb61d060f4c\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "if-everyone-who-login-cooggercom-join-in-the-curation-trail-of-cooggerup-how-much-is-the-reward-per-content",
"title": "If Everyone Who Login Coogger Join in the Curation Trail of Coogger.up | How Much is the Reward Per Content?"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:15:21",
"trx_id": "2e44eb12b956c267edced9c04dedc704f5c5e8b8",
"trx_in_block": 8,
"virtual_op": false
}hakancelikpublished a new post: how-to-use-coogger-python-v022019/05/20 02:10:54
hakancelikpublished a new post: how-to-use-coogger-python-v02
2019/05/20 02:10:54
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/how-to-use-coogger-python-v02"> <img alt="" src="https://www.coogger.com/media/images/coogger-python.png"> </a> <a href="https://www.coogger.com/@hakancelik/how-to-use-coogger-python-v02">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "english", "coogger-python", "python", "tutorial"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "<img gnrl=\"br-6\" src=\"https://www.coogger.com/media/images/coogger-python.png\"></img>\r\n\r\n[TOC]\r\n\r\n## Getting started\r\n\r\n#### Notes :\r\n- for now only authorized accounts can access the API service\r\n- [coogger-python on Github](https://github.com/coogger/coogger-python)\r\n\r\nInstall the package:\r\n\r\n```python\r\npip install coogger-python\r\n```\r\n\r\n## How to use coogger-python\r\n\r\nLet's include each class in our project, as below.\r\n\r\n```python\r\nfrom coogger.content import ContentApi, ContentFilterApi\r\nfrom coogger.user import SteemConnectUserApi, UserApi, UserFilterApi\r\nfrom coogger.ditop import DictToObject\r\n```\r\n\r\nyou can filter the contents you want to take with the following parameters.\r\n\r\n### ContentFilterApi\r\n\r\nThe **ContentFilterApi** class allows content to be filtered by any property.\r\n\r\n> Parameters\r\n- permlink\r\n- category\r\n- language\r\n- topic\r\n- status # shared / changed / approved /rejected\r\n- dor # duration of read\r\n- views\r\n- read\r\n- mod\r\n- cooggerup\r\n\r\n```python\r\n>>> content_filter_api = ContentFilterApi(username:str, sessionid:str, node:str)\r\nnode -> default = \"https://www.coogger.com/api/content/\"\r\nnode -> you can set \"http://127.0.0.1:8000/api/content/\" when you work local\r\n>>> filter_content = content_filter_api.filter(category=\"tutorial\", status=\"approved\", language=\"turkish\")\r\n>>> contents = content_filter_api.result\r\n>>> next_page = content_filter_api.next\r\n>>> previous_page = content_filter_api.previous\r\n>>> [content for content in contents]\r\n```\r\n\r\n### ContentApi\r\n\r\n**ContentApi** class is used to view or update a specific content.\r\n\r\n```python\r\n\r\n>>> content_api = ContentApi(username:str, permlink:str, sessionid:str, node:str)\r\nnode -> default -> \"https://www.coogger.com/api/content/{}/{}/\"\r\nsessionid -> default -> None\r\n>>> content_api.update(title=\"title\", category=\"category\", status=\"status\")\r\n\r\n```\r\n\r\n-----------\r\n\r\n### SteemConnectUserApi\r\n\r\nThe **SteemConnectUserApi** class is used to access SteemConnect User information, SteemConnectUserApi class is used to view or update a specific SteemConnect user,\r\n\r\n```python\r\n>>> steem_connect_user = SteemConnectUserApi(username:str, sessionid:str, node:str)\r\nnode -> default : \"http://www.coogger.com/api/steemconnectuser/@{}/\"\r\nsessionid -> default : None\r\n>>> user = steem_connect_user.get\r\n>>> user_update = steem_connect_user.update(access_token=\"new_access_token\")\r\n\r\n```\r\n\r\n### UserApi\r\nThe **UserApi** class is used to access user information, UserApi class is used to view or update a specific user.\r\n\r\n```python\r\n>>> user_api = UserApi(username:str, sessionid:str, node:str)\r\nnode -> default : \"http://www.coogger.com/api/user/@{}/\"\r\nsessionid -> default : None\r\n>>> user = user_api.get\r\n>>> user_update = user_api.update(about=\"hello\")\r\n\r\n```\r\n\r\n### UserFilterApi\r\n\r\nThe **UserFilterApi** class allows user to be filtered by any property.\r\n\r\n> Parameters\r\n- about\r\n- cooggerup_confirmation\r\n- cooggerup_percent\r\n- vote_percent\r\n- beneficiaries\r\n\r\n```python\r\n>>> user_filter_api = UserFilterApi(sessionid:str, node:str)\r\nnode -> default = \"https://www.coogger.com/api/user/\"\r\nnode -> you can set \"http://127.0.0.1:8000/api/user/\" when you work local\r\n>>> filter_user = user_filter_api.filter(cooggerup_confirmation=True, beneficiaries=10)\r\n>>> users = filter_user.result\r\n>>> next_page = filter_user.next\r\n>>> previous_page = filter_user.previous\r\n>>> [user for user in users]\r\n```"}} |
| parent author | |
| parent permlink | coogger |
| permlink | how-to-use-coogger-python-v02 |
| title | How to use coogger-python - V0.2 |
| Transaction Info | Block #33060485/Trx e4b07b142ac1e80aa4b93e0c7878672047ecd9a8 |
View Raw JSON Data
{
"block": 33060485,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/how-to-use-coogger-python-v02\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/coogger-python.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/how-to-use-coogger-python-v02\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"english\", \"coogger-python\", \"python\", \"tutorial\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"<img gnrl=\\\"br-6\\\" src=\\\"https://www.coogger.com/media/images/coogger-python.png\\\"></img>\\r\\n\\r\\n[TOC]\\r\\n\\r\\n## Getting started\\r\\n\\r\\n#### Notes :\\r\\n- for now only authorized accounts can access the API service\\r\\n- [coogger-python on Github](https://github.com/coogger/coogger-python)\\r\\n\\r\\nInstall the package:\\r\\n\\r\\n```python\\r\\npip install coogger-python\\r\\n```\\r\\n\\r\\n## How to use coogger-python\\r\\n\\r\\nLet's include each class in our project, as below.\\r\\n\\r\\n```python\\r\\nfrom coogger.content import ContentApi, ContentFilterApi\\r\\nfrom coogger.user import SteemConnectUserApi, UserApi, UserFilterApi\\r\\nfrom coogger.ditop import DictToObject\\r\\n```\\r\\n\\r\\nyou can filter the contents you want to take with the following parameters.\\r\\n\\r\\n### ContentFilterApi\\r\\n\\r\\nThe **ContentFilterApi** class allows content to be filtered by any property.\\r\\n\\r\\n> Parameters\\r\\n- permlink\\r\\n- category\\r\\n- language\\r\\n- topic\\r\\n- status # shared / changed / approved /rejected\\r\\n- dor # duration of read\\r\\n- views\\r\\n- read\\r\\n- mod\\r\\n- cooggerup\\r\\n\\r\\n```python\\r\\n>>> content_filter_api = ContentFilterApi(username:str, sessionid:str, node:str)\\r\\nnode -> default = \\\"https://www.coogger.com/api/content/\\\"\\r\\nnode -> you can set \\\"http://127.0.0.1:8000/api/content/\\\" when you work local\\r\\n>>> filter_content = content_filter_api.filter(category=\\\"tutorial\\\", status=\\\"approved\\\", language=\\\"turkish\\\")\\r\\n>>> contents = content_filter_api.result\\r\\n>>> next_page = content_filter_api.next\\r\\n>>> previous_page = content_filter_api.previous\\r\\n>>> [content for content in contents]\\r\\n```\\r\\n\\r\\n### ContentApi\\r\\n\\r\\n**ContentApi** class is used to view or update a specific content.\\r\\n\\r\\n```python\\r\\n\\r\\n>>> content_api = ContentApi(username:str, permlink:str, sessionid:str, node:str)\\r\\nnode -> default -> \\\"https://www.coogger.com/api/content/{}/{}/\\\"\\r\\nsessionid -> default -> None\\r\\n>>> content_api.update(title=\\\"title\\\", category=\\\"category\\\", status=\\\"status\\\")\\r\\n\\r\\n```\\r\\n\\r\\n-----------\\r\\n\\r\\n### SteemConnectUserApi\\r\\n\\r\\nThe **SteemConnectUserApi** class is used to access SteemConnect User information, SteemConnectUserApi class is used to view or update a specific SteemConnect user,\\r\\n\\r\\n```python\\r\\n>>> steem_connect_user = SteemConnectUserApi(username:str, sessionid:str, node:str)\\r\\nnode -> default : \\\"http://www.coogger.com/api/steemconnectuser/@{}/\\\"\\r\\nsessionid -> default : None\\r\\n>>> user = steem_connect_user.get\\r\\n>>> user_update = steem_connect_user.update(access_token=\\\"new_access_token\\\")\\r\\n\\r\\n```\\r\\n\\r\\n### UserApi\\r\\nThe **UserApi** class is used to access user information, UserApi class is used to view or update a specific user.\\r\\n\\r\\n```python\\r\\n>>> user_api = UserApi(username:str, sessionid:str, node:str)\\r\\nnode -> default : \\\"http://www.coogger.com/api/user/@{}/\\\"\\r\\nsessionid -> default : None\\r\\n>>> user = user_api.get\\r\\n>>> user_update = user_api.update(about=\\\"hello\\\")\\r\\n\\r\\n```\\r\\n\\r\\n### UserFilterApi\\r\\n\\r\\nThe **UserFilterApi** class allows user to be filtered by any property.\\r\\n\\r\\n> Parameters\\r\\n- about\\r\\n- cooggerup_confirmation\\r\\n- cooggerup_percent\\r\\n- vote_percent\\r\\n- beneficiaries\\r\\n\\r\\n```python\\r\\n>>> user_filter_api = UserFilterApi(sessionid:str, node:str)\\r\\nnode -> default = \\\"https://www.coogger.com/api/user/\\\"\\r\\nnode -> you can set \\\"http://127.0.0.1:8000/api/user/\\\" when you work local\\r\\n>>> filter_user = user_filter_api.filter(cooggerup_confirmation=True, beneficiaries=10)\\r\\n>>> users = filter_user.result\\r\\n>>> next_page = filter_user.next\\r\\n>>> previous_page = filter_user.previous\\r\\n>>> [user for user in users]\\r\\n```\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "how-to-use-coogger-python-v02",
"title": "How to use coogger-python - V0.2"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:10:54",
"trx_id": "e4b07b142ac1e80aa4b93e0c7878672047ecd9a8",
"trx_in_block": 6,
"virtual_op": false
}hakancelikpublished a new post: renk-paleti-olarak-parca-cubugu-trackbar2019/05/20 02:09:42
hakancelikpublished a new post: renk-paleti-olarak-parca-cubugu-trackbar
2019/05/20 02:09:42
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/renk-paleti-olarak-parca-cubugu-trackbar"> <img alt="" src="https://www.coogger.com/media/images/opencv_3JcB3OU.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/renk-paleti-olarak-parca-cubugu-trackbar">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "trackbar", "gettrackbarpos", "python", "opencv"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "### Hedefler\r\n\r\n- **Trackbar'\u0131** OpenCV pencerelerine ba\u011flamay\u0131 \u00f6\u011frenece\u011fiz\r\n- \u015eu fonksiyonlar\u0131 \u00f6\u011frenece\u011fiz ; **cv2.getTrackbarPos ()**, **cv2.createTrackbar()** vb.\r\n\r\n### Demo\r\n\r\nBurada belirtti\u011finiz rengi g\u00f6steren basit bir uygulama olu\u015fturaca\u011f\u0131z.B, G ve R renklerinin her birini belirtmek i\u00e7in rengi ve \u00fc\u00e7 trackbar\u0131 g\u00f6steren bir pencereniz var.\u0130z \u00e7ubu\u011funu kayd\u0131r\u0131rs\u0131n\u0131z ve buna kar\u015f\u0131l\u0131k gelen renk pen\u00e7erede de\u011fi\u015fir.Varsay\u0131lan olarak, ba\u015flang\u0131\u00e7 rengi Siyah olarak ayarlanacakt\u0131r.\r\n\r\n**Cv2.getTrackbarPos()** i\u015flevi i\u00e7in\r\n\r\n- ilk arg\u00fcman trackbar ismidir\r\n- ikincisi ba\u011fl\u0131 oldu\u011fu pencere ad\u0131d\u0131r\r\n- \u00dc\u00e7\u00fcnc\u00fc arg\u00fcman varsay\u0131lan de\u011ferdir\r\n- d\u00f6rd\u00fcnc\u00fcs\u00fc ise maksimum de\u011ferdir\r\n- be\u015fincisi, trackbar de\u011ferinin her de\u011fi\u015fti\u011finde \u00e7al\u0131\u015ft\u0131r\u0131lan geri \u00e7a\u011f\u0131rma fonksiyonudur.\r\n\r\nGeri \u00e7a\u011f\u0131rma fonksiyonu her zaman trackbar konumu olan bir varsay\u0131lan arg\u00fcmana sahiptir.Bizim durumumuzda, i\u015fleve hi\u00e7bir \u015fey yapmaz, bu nedenle pas ge\u00e7eriz.\r\n\r\ntrackbar'\u0131n bir di\u011fer \u00f6nemli uygulamas\u0131, onu bir d\u00fc\u011fme veya anahtar olarak kullanmakt\u0131r.OpenCV, varsay\u0131lan olarak d\u00fc\u011fme fonksiyonunu i\u00e7ermez.\r\n\r\nBu y\u00fczden bu t\u00fcr i\u015flemler i\u00e7in trackbar'\u0131 kullanabilirsiniz.Uygulamam\u0131zda, uygulaman\u0131n yaln\u0131zca anahtar A\u00c7IK oldu\u011fu durumda \u00e7al\u0131\u015ft\u0131\u011f\u0131 bir anahtar olu\u015fturduk, aksi halde ekran her zaman siyaht\u0131r.\r\n\r\n```python\r\n\r\nimport cv2\r\nimport numpy as np\r\n\r\ndef nothing(x):\r\n pass\r\n\r\n# siyah bir resim olu\u015fturduk, bir pencere\r\nimg = np.zeros((300,512,3), np.uint8)\r\ncv2.namedWindow('image')\r\n# renk de\u011fi\u015fimi i\u00e7in trackbars'\u0131 olu\u015fturduk\r\ncv2.createTrackbar('R','image',0,255,nothing)\r\ncv2.createTrackbar('G','image',0,255,nothing)\r\ncv2.createTrackbar('B','image',0,255,nothing)\r\n# ON / OFF i\u015flevselli\u011fi i\u00e7in anahtar olu\u015fturduk\r\nswitch = '0 : OFF \\n1 : ON'\r\ncv2.createTrackbar(switch, 'image',0,1,nothing)\r\nwhile(1):\r\n cv2.imshow('image',img)\r\n k = cv2.waitKey(1) & 0xFF\r\n if k == 27:\r\n break\r\n #d\u00f6rt trackbars'\u0131n ge\u00e7erli konumlar\u0131n\u0131 ald\u0131k\r\n r = cv2.getTrackbarPos('R','image')\r\n g = cv2.getTrackbarPos('G','image')\r\n b = cv2.getTrackbarPos('B','image')\r\n s = cv2.getTrackbarPos(switch,'image')\r\n\r\n if s == 0:\r\n img[:] = 0\r\n else:\r\n img[:] = [b,g,r]\r\ncv2.destroyAllWindows()\r\n\r\n```\r\n\r\nEkran g\u00f6r\u00fcnt\u00fcs\u00fc ;\r\n\r\n<img general=\"center br-4\" src=\"https://www.coogger.com/media/images/opencv_3JcB3OU.jpg\">"}} |
| parent author | |
| parent permlink | coogger |
| permlink | renk-paleti-olarak-parca-cubugu-trackbar |
| title | Renk Paleti Olarak Parça Çubuğu ( Trackbar ) |
| Transaction Info | Block #33060461/Trx 4b71896a657a05261b8fd00aae0617ef8aade261 |
View Raw JSON Data
{
"block": 33060461,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/renk-paleti-olarak-parca-cubugu-trackbar\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/opencv_3JcB3OU.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/renk-paleti-olarak-parca-cubugu-trackbar\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"trackbar\", \"gettrackbarpos\", \"python\", \"opencv\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"### Hedefler\\r\\n\\r\\n- **Trackbar'\\u0131** OpenCV pencerelerine ba\\u011flamay\\u0131 \\u00f6\\u011frenece\\u011fiz\\r\\n- \\u015eu fonksiyonlar\\u0131 \\u00f6\\u011frenece\\u011fiz ; **cv2.getTrackbarPos ()**, **cv2.createTrackbar()** vb.\\r\\n\\r\\n### Demo\\r\\n\\r\\nBurada belirtti\\u011finiz rengi g\\u00f6steren basit bir uygulama olu\\u015fturaca\\u011f\\u0131z.B, G ve R renklerinin her birini belirtmek i\\u00e7in rengi ve \\u00fc\\u00e7 trackbar\\u0131 g\\u00f6steren bir pencereniz var.\\u0130z \\u00e7ubu\\u011funu kayd\\u0131r\\u0131rs\\u0131n\\u0131z ve buna kar\\u015f\\u0131l\\u0131k gelen renk pen\\u00e7erede de\\u011fi\\u015fir.Varsay\\u0131lan olarak, ba\\u015flang\\u0131\\u00e7 rengi Siyah olarak ayarlanacakt\\u0131r.\\r\\n\\r\\n**Cv2.getTrackbarPos()** i\\u015flevi i\\u00e7in\\r\\n\\r\\n- ilk arg\\u00fcman trackbar ismidir\\r\\n- ikincisi ba\\u011fl\\u0131 oldu\\u011fu pencere ad\\u0131d\\u0131r\\r\\n- \\u00dc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman varsay\\u0131lan de\\u011ferdir\\r\\n- d\\u00f6rd\\u00fcnc\\u00fcs\\u00fc ise maksimum de\\u011ferdir\\r\\n- be\\u015fincisi, trackbar de\\u011ferinin her de\\u011fi\\u015fti\\u011finde \\u00e7al\\u0131\\u015ft\\u0131r\\u0131lan geri \\u00e7a\\u011f\\u0131rma fonksiyonudur.\\r\\n\\r\\nGeri \\u00e7a\\u011f\\u0131rma fonksiyonu her zaman trackbar konumu olan bir varsay\\u0131lan arg\\u00fcmana sahiptir.Bizim durumumuzda, i\\u015fleve hi\\u00e7bir \\u015fey yapmaz, bu nedenle pas ge\\u00e7eriz.\\r\\n\\r\\ntrackbar'\\u0131n bir di\\u011fer \\u00f6nemli uygulamas\\u0131, onu bir d\\u00fc\\u011fme veya anahtar olarak kullanmakt\\u0131r.OpenCV, varsay\\u0131lan olarak d\\u00fc\\u011fme fonksiyonunu i\\u00e7ermez.\\r\\n\\r\\nBu y\\u00fczden bu t\\u00fcr i\\u015flemler i\\u00e7in trackbar'\\u0131 kullanabilirsiniz.Uygulamam\\u0131zda, uygulaman\\u0131n yaln\\u0131zca anahtar A\\u00c7IK oldu\\u011fu durumda \\u00e7al\\u0131\\u015ft\\u0131\\u011f\\u0131 bir anahtar olu\\u015fturduk, aksi halde ekran her zaman siyaht\\u0131r.\\r\\n\\r\\n```python\\r\\n\\r\\nimport cv2\\r\\nimport numpy as np\\r\\n\\r\\ndef nothing(x):\\r\\n pass\\r\\n\\r\\n# siyah bir resim olu\\u015fturduk, bir pencere\\r\\nimg = np.zeros((300,512,3), np.uint8)\\r\\ncv2.namedWindow('image')\\r\\n# renk de\\u011fi\\u015fimi i\\u00e7in trackbars'\\u0131 olu\\u015fturduk\\r\\ncv2.createTrackbar('R','image',0,255,nothing)\\r\\ncv2.createTrackbar('G','image',0,255,nothing)\\r\\ncv2.createTrackbar('B','image',0,255,nothing)\\r\\n# ON / OFF i\\u015flevselli\\u011fi i\\u00e7in anahtar olu\\u015fturduk\\r\\nswitch = '0 : OFF \\\\n1 : ON'\\r\\ncv2.createTrackbar(switch, 'image',0,1,nothing)\\r\\nwhile(1):\\r\\n cv2.imshow('image',img)\\r\\n k = cv2.waitKey(1) & 0xFF\\r\\n if k == 27:\\r\\n break\\r\\n #d\\u00f6rt trackbars'\\u0131n ge\\u00e7erli konumlar\\u0131n\\u0131 ald\\u0131k\\r\\n r = cv2.getTrackbarPos('R','image')\\r\\n g = cv2.getTrackbarPos('G','image')\\r\\n b = cv2.getTrackbarPos('B','image')\\r\\n s = cv2.getTrackbarPos(switch,'image')\\r\\n\\r\\n if s == 0:\\r\\n img[:] = 0\\r\\n else:\\r\\n img[:] = [b,g,r]\\r\\ncv2.destroyAllWindows()\\r\\n\\r\\n```\\r\\n\\r\\nEkran g\\u00f6r\\u00fcnt\\u00fcs\\u00fc ;\\r\\n\\r\\n<img general=\\\"center br-4\\\" src=\\\"https://www.coogger.com/media/images/opencv_3JcB3OU.jpg\\\">\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "renk-paleti-olarak-parca-cubugu-trackbar",
"title": "Renk Paleti Olarak Parça Çubuğu ( Trackbar )"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:09:42",
"trx_id": "4b71896a657a05261b8fd00aae0617ef8aade261",
"trx_in_block": 1,
"virtual_op": false
}hakancelikpublished a new post: goruntulerde-aritmetik-islemler2019/05/20 02:08:48
hakancelikpublished a new post: goruntulerde-aritmetik-islemler
2019/05/20 02:08:48
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/goruntulerde-aritmetik-islemler"> <img alt="" src="https://steemitimages.com/0X0/http://opencv-python-tutroals.readthedocs.io/en/latest/_images/math/8086cd5f33e2aed7d185e1f55fc31ceab4433c2b.png"> </a> <a href="https://www.coogger.com/@hakancelik/goruntulerde-aritmetik-islemler">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "cv2add", "python-opencv", "cv2addweighted"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "## Hedefler\r\n\r\nG\u00f6r\u00fcnt\u00fcler \u00fczerinde **toplama**, **\u00e7\u0131karma**, **bitd\u00fczeyi** i\u015flemleri gibi birka\u00e7 aritmetik i\u015flemleri \u00f6\u011frenece\u011fiz.\r\nBu fonksiyonlar\u0131 \u00f6\u011freneceksiniz : **cv2.add()**, **cv2.addWeighted()** vb.\r\n\r\n## Resim ekleme\r\nOpencv fonksiyonu, **cv2.add()** veya **numpy** i\u015flemleri, **res = img1 + img2** ile iki resim ekleyebilirsiniz. Her iki g\u00f6r\u00fcnt\u00fc de ayn\u0131 derinlik ve t\u00fcre sahip olmal\u0131 veya ikinci g\u00f6r\u00fcnt\u00fc yaln\u0131zca skalar de\u011ferinde olabilir.\r\n\r\n**Not ;**\r\n\r\nOpenCV eklemesi ile Numpy eklemesi aras\u0131nda bir fark vard\u0131r. OpenCV eklemesi doymu\u015f bir i\u015flemdir, buna kar\u015f\u0131n Numpy ilavesi mod\u00fcler bir i\u015flemdir.\r\n\r\n\u00f6rnek olarak ;\r\n\r\n```python\r\n>>> x = np.uint8([250])\r\n>>> y = np.uint8([10])\r\n>>> print(cv2.add(x,y)) # 250+10 = 260 => 255\r\n[[255]]\r\n>>> print(x+y) # 250+10 = 260 % 256 = 4\r\n[4]\r\n```\r\n\r\n\u0130ki resim ekledi\u011finizde daha g\u00f6r\u00fcn\u00fcr olacakt\u0131r. OpenCV i\u015flevi daha iyi sonu\u00e7 verecektir. Bu y\u00fczden her zaman OpenCV i\u015flevlerine sad\u0131k kal\u0131n.\r\n\r\n## G\u00f6r\u00fcnt\u00fc Kar\u0131\u015ft\u0131rma\r\n\r\nBu ayn\u0131 zamanda g\u00f6r\u00fcnt\u00fc eklemesidir, ancak farkl\u0131 a\u011f\u0131rl\u0131klar g\u00f6r\u00fcnt\u00fclere verilir, b\u00f6ylece harmanlama veya \u015feffafl\u0131k hissi verir. Resimler a\u015fa\u011f\u0131daki denkleme g\u00f6re eklenir:\r\n \r\n'e de\u011fi\u015fen  bir g\u00f6r\u00fcnt\u00fc aras\u0131nda di\u011ferine serin bir ge\u00e7i\u015f yapabilirsiniz. Burada onlar\u0131 bir araya getirmek i\u00e7in iki g\u00f6r\u00fcnt\u00fc ald\u0131m.\r\n\r\n\u0130lk resme 0.7 a\u011f\u0131rl\u0131k ve ikinci resme 0.3 verilir. **cv2.addWeighted()**, a\u015fa\u011f\u0131daki denklemi g\u00f6r\u00fcnt\u00fcye uygular.\r\n\r\n\r\n\r\nBurada  s\u0131f\u0131r olarak al\u0131n\u0131r.\r\n\r\n```python\r\nimg1 = cv2.imread('ml.png')\r\nimg2 = cv2.imread('opencv_logo.jpg')\r\ndst = cv2.addWeighted(img1,0.7,img2,0.3,0)\r\ncv2.imshow('dst',dst)\r\ncv2.waitKey(0)\r\ncv2.destroyAllWindows()\r\n```\r\n\r\n**sonu\u00e7 ;**\r\n\r\n<img general=\"center br-4\" src=\"https://www.coogger.com/media/images/opencv_YfZ6eAZ.jpg\">\r\n\r\n## Bitwise Operations ( Bit d\u00fczeyi i\u015flemleri )\r\n\r\nBu bitwise **AND**, **OR**, **NOT** ve **XOR** i\u015flemlerini i\u00e7erir. Resmin herhangi bir b\u00f6l\u00fcm\u00fcn\u00fc \u00e7\u0131kart\u0131rken (ilerleyen b\u00f6l\u00fcmlerde de g\u00f6rece\u011fimiz gibi) dikd\u00f6rtgen olmayan ROI vb. Ile tan\u0131mlama ve \u00e7al\u0131\u015fma yaparken son derece faydal\u0131 olacaklar.\r\n\r\nA\u015fa\u011f\u0131da, resmin belirli bir b\u00f6l\u00fcm\u00fcn\u00fc nas\u0131l de\u011fi\u015ftirece\u011finize ili\u015fkin bir \u00f6rnek g\u00f6rece\u011fiz.\r\n\r\nOpenCV logosunu bir resmin \u00fczerine koyal\u0131m. \u0130ki resim eklersem renk de\u011fi\u015fir, E\u011fer dikd\u00f6rtgen bir b\u00f6lge olsayd\u0131, ROI'y\u0131 son b\u00f6l\u00fcmde yapt\u0131\u011f\u0131m\u0131z gibi kullanabilirdim. Ancak OpenCV logosu dikd\u00f6rtgen bir \u015fekle de\u011fil. Dolay\u0131s\u0131yla, bunu a\u015fa\u011f\u0131daki gibi bitwise i\u015flemlerle yapabilirsiniz:\r\n\r\n```python\r\n# iki resmi y\u00fckl\u00fcyoruz\r\nimg1 = cv2.imread('messi5.jpg')\r\nimg2 = cv2.imread('opencv_logo.png')\r\n\r\n# Sol \u00fcst k\u00f6\u015feye logo koymak istiyorum, bu y\u00fczden bir ROI olu\u015fturuyorum\r\nrows,cols,channels = img2.shape\r\nroi = img1[0:rows, 0:cols ]\r\n\r\n# \u015fimdi logonun maskesini olu\u015fturun ve ayr\u0131ca ters maskesinide olu\u015fturun\r\nimg2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)\r\nret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)\r\nmask_inv = cv2.bitwise_not(mask)\r\n\r\n# \u015fimdi logo i\u00e7indeki ROI 'un alan\u0131n\u0131 karartal\u0131m\r\nimg1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)\r\n\r\n# Logo g\u00f6r\u00fcnt\u00fcs\u00fcnden yaln\u0131zca logo b\u00f6lgesi ald\u0131k.\r\nimg2_fg = cv2.bitwise_and(img2,img2,mask = mask)\r\n\r\n# ROI'ye logo koyun ve ana g\u00f6r\u00fcnt\u00fcy\u00fc de\u011fi\u015ftiriyoruz\r\ndst = cv2.add(img1_bg,img2_fg)\r\nimg1[0:rows, 0:cols ] = dst\r\n\r\ncv2.imshow('res',img1)\r\ncv2.waitKey(0)\r\ncv2.destroyAllWindows()\r\n```\r\n\r\nA\u015fa\u011f\u0131daki sonuca bak\u0131n, Sol resim imal etti\u011fimiz maskeyi g\u00f6sterir, Sa\u011f g\u00f6r\u00fcnt\u00fc ise sen son olu\u015fan sonucu g\u00f6sterir.\r\n\r\n<img general=\"center b-4\" src=\"https://www.coogger.com/media/images/opencv_LAvFMC7.jpg\">"}} |
| parent author | |
| parent permlink | coogger |
| permlink | goruntulerde-aritmetik-islemler |
| title | Görüntülerde Aritmetik İşlemler |
| Transaction Info | Block #33060443/Trx 4f5e8be59b638afabb80c657e908ff2e5ad543e4 |
View Raw JSON Data
{
"block": 33060443,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntulerde-aritmetik-islemler\">\n\n\n <img alt=\"\" src=\"https://steemitimages.com/0X0/http://opencv-python-tutroals.readthedocs.io/en/latest/_images/math/8086cd5f33e2aed7d185e1f55fc31ceab4433c2b.png\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntulerde-aritmetik-islemler\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"cv2add\", \"python-opencv\", \"cv2addweighted\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"## Hedefler\\r\\n\\r\\nG\\u00f6r\\u00fcnt\\u00fcler \\u00fczerinde **toplama**, **\\u00e7\\u0131karma**, **bitd\\u00fczeyi** i\\u015flemleri gibi birka\\u00e7 aritmetik i\\u015flemleri \\u00f6\\u011frenece\\u011fiz.\\r\\nBu fonksiyonlar\\u0131 \\u00f6\\u011freneceksiniz : **cv2.add()**, **cv2.addWeighted()** vb.\\r\\n\\r\\n## Resim ekleme\\r\\nOpencv fonksiyonu, **cv2.add()** veya **numpy** i\\u015flemleri, **res = img1 + img2** ile iki resim ekleyebilirsiniz. Her iki g\\u00f6r\\u00fcnt\\u00fc de ayn\\u0131 derinlik ve t\\u00fcre sahip olmal\\u0131 veya ikinci g\\u00f6r\\u00fcnt\\u00fc yaln\\u0131zca skalar de\\u011ferinde olabilir.\\r\\n\\r\\n**Not ;**\\r\\n\\r\\nOpenCV eklemesi ile Numpy eklemesi aras\\u0131nda bir fark vard\\u0131r. OpenCV eklemesi doymu\\u015f bir i\\u015flemdir, buna kar\\u015f\\u0131n Numpy ilavesi mod\\u00fcler bir i\\u015flemdir.\\r\\n\\r\\n\\u00f6rnek olarak ;\\r\\n\\r\\n```python\\r\\n>>> x = np.uint8([250])\\r\\n>>> y = np.uint8([10])\\r\\n>>> print(cv2.add(x,y)) # 250+10 = 260 => 255\\r\\n[[255]]\\r\\n>>> print(x+y) # 250+10 = 260 % 256 = 4\\r\\n[4]\\r\\n```\\r\\n\\r\\n\\u0130ki resim ekledi\\u011finizde daha g\\u00f6r\\u00fcn\\u00fcr olacakt\\u0131r. OpenCV i\\u015flevi daha iyi sonu\\u00e7 verecektir. Bu y\\u00fczden her zaman OpenCV i\\u015flevlerine sad\\u0131k kal\\u0131n.\\r\\n\\r\\n## G\\u00f6r\\u00fcnt\\u00fc Kar\\u0131\\u015ft\\u0131rma\\r\\n\\r\\nBu ayn\\u0131 zamanda g\\u00f6r\\u00fcnt\\u00fc eklemesidir, ancak farkl\\u0131 a\\u011f\\u0131rl\\u0131klar g\\u00f6r\\u00fcnt\\u00fclere verilir, b\\u00f6ylece harmanlama veya \\u015feffafl\\u0131k hissi verir. Resimler a\\u015fa\\u011f\\u0131daki denkleme g\\u00f6re eklenir:\\r\\n \\r\\n'e de\\u011fi\\u015fen  bir g\\u00f6r\\u00fcnt\\u00fc aras\\u0131nda di\\u011ferine serin bir ge\\u00e7i\\u015f yapabilirsiniz. Burada onlar\\u0131 bir araya getirmek i\\u00e7in iki g\\u00f6r\\u00fcnt\\u00fc ald\\u0131m.\\r\\n\\r\\n\\u0130lk resme 0.7 a\\u011f\\u0131rl\\u0131k ve ikinci resme 0.3 verilir. **cv2.addWeighted()**, a\\u015fa\\u011f\\u0131daki denklemi g\\u00f6r\\u00fcnt\\u00fcye uygular.\\r\\n\\r\\n\\r\\n\\r\\nBurada  s\\u0131f\\u0131r olarak al\\u0131n\\u0131r.\\r\\n\\r\\n```python\\r\\nimg1 = cv2.imread('ml.png')\\r\\nimg2 = cv2.imread('opencv_logo.jpg')\\r\\ndst = cv2.addWeighted(img1,0.7,img2,0.3,0)\\r\\ncv2.imshow('dst',dst)\\r\\ncv2.waitKey(0)\\r\\ncv2.destroyAllWindows()\\r\\n```\\r\\n\\r\\n**sonu\\u00e7 ;**\\r\\n\\r\\n<img general=\\\"center br-4\\\" src=\\\"https://www.coogger.com/media/images/opencv_YfZ6eAZ.jpg\\\">\\r\\n\\r\\n## Bitwise Operations ( Bit d\\u00fczeyi i\\u015flemleri )\\r\\n\\r\\nBu bitwise **AND**, **OR**, **NOT** ve **XOR** i\\u015flemlerini i\\u00e7erir. Resmin herhangi bir b\\u00f6l\\u00fcm\\u00fcn\\u00fc \\u00e7\\u0131kart\\u0131rken (ilerleyen b\\u00f6l\\u00fcmlerde de g\\u00f6rece\\u011fimiz gibi) dikd\\u00f6rtgen olmayan ROI vb. Ile tan\\u0131mlama ve \\u00e7al\\u0131\\u015fma yaparken son derece faydal\\u0131 olacaklar.\\r\\n\\r\\nA\\u015fa\\u011f\\u0131da, resmin belirli bir b\\u00f6l\\u00fcm\\u00fcn\\u00fc nas\\u0131l de\\u011fi\\u015ftirece\\u011finize ili\\u015fkin bir \\u00f6rnek g\\u00f6rece\\u011fiz.\\r\\n\\r\\nOpenCV logosunu bir resmin \\u00fczerine koyal\\u0131m. \\u0130ki resim eklersem renk de\\u011fi\\u015fir, E\\u011fer dikd\\u00f6rtgen bir b\\u00f6lge olsayd\\u0131, ROI'y\\u0131 son b\\u00f6l\\u00fcmde yapt\\u0131\\u011f\\u0131m\\u0131z gibi kullanabilirdim. Ancak OpenCV logosu dikd\\u00f6rtgen bir \\u015fekle de\\u011fil. Dolay\\u0131s\\u0131yla, bunu a\\u015fa\\u011f\\u0131daki gibi bitwise i\\u015flemlerle yapabilirsiniz:\\r\\n\\r\\n```python\\r\\n# iki resmi y\\u00fckl\\u00fcyoruz\\r\\nimg1 = cv2.imread('messi5.jpg')\\r\\nimg2 = cv2.imread('opencv_logo.png')\\r\\n\\r\\n# Sol \\u00fcst k\\u00f6\\u015feye logo koymak istiyorum, bu y\\u00fczden bir ROI olu\\u015fturuyorum\\r\\nrows,cols,channels = img2.shape\\r\\nroi = img1[0:rows, 0:cols ]\\r\\n\\r\\n# \\u015fimdi logonun maskesini olu\\u015fturun ve ayr\\u0131ca ters maskesinide olu\\u015fturun\\r\\nimg2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)\\r\\nret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)\\r\\nmask_inv = cv2.bitwise_not(mask)\\r\\n\\r\\n# \\u015fimdi logo i\\u00e7indeki ROI 'un alan\\u0131n\\u0131 karartal\\u0131m\\r\\nimg1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)\\r\\n\\r\\n# Logo g\\u00f6r\\u00fcnt\\u00fcs\\u00fcnden yaln\\u0131zca logo b\\u00f6lgesi ald\\u0131k.\\r\\nimg2_fg = cv2.bitwise_and(img2,img2,mask = mask)\\r\\n\\r\\n# ROI'ye logo koyun ve ana g\\u00f6r\\u00fcnt\\u00fcy\\u00fc de\\u011fi\\u015ftiriyoruz\\r\\ndst = cv2.add(img1_bg,img2_fg)\\r\\nimg1[0:rows, 0:cols ] = dst\\r\\n\\r\\ncv2.imshow('res',img1)\\r\\ncv2.waitKey(0)\\r\\ncv2.destroyAllWindows()\\r\\n```\\r\\n\\r\\nA\\u015fa\\u011f\\u0131daki sonuca bak\\u0131n, Sol resim imal etti\\u011fimiz maskeyi g\\u00f6sterir, Sa\\u011f g\\u00f6r\\u00fcnt\\u00fc ise sen son olu\\u015fan sonucu g\\u00f6sterir.\\r\\n\\r\\n<img general=\\\"center b-4\\\" src=\\\"https://www.coogger.com/media/images/opencv_LAvFMC7.jpg\\\">\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "goruntulerde-aritmetik-islemler",
"title": "Görüntülerde Aritmetik İşlemler"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:08:48",
"trx_id": "4f5e8be59b638afabb80c657e908ff2e5ad543e4",
"trx_in_block": 9,
"virtual_op": false
}hakancelikpublished a new post: opencvde-cizim-fonksiyonlar2019/05/20 02:06:27
hakancelikpublished a new post: opencvde-cizim-fonksiyonlar
2019/05/20 02:06:27
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/opencvde-cizim-fonksiyonlar"> <img alt="" src="https://www.coogger.com/media/images/drawing.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/opencvde-cizim-fonksiyonlar">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "circle", "rectangle", "python", "opencv"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "### Hedefler\r\n- OpenCV ile farkl\u0131 geometrik \u015fekilleri \u00e7izmeyi \u00f6\u011frene\u00e7e\u011fiz\r\n- Bu fonksiyonlar\u0131 \u00f6\u011frenece\u011fiz: **cv2.line ()**, **cv2.circle ()**, **cv2.rectangle ()**, **cv2.ellipse ()**, **cv2.putText ()** vb.\r\n\r\n### Kod\r\nYukar\u0131daki t\u00fcm fonksiyonlarda , a\u015fa\u011f\u0131da verilen \u015fekilde ortak arg\u00fcmanlar g\u00f6receksiniz.\r\n\r\n**img** : \u015fekilleri \u00e7izmek istedi\u011finiz g\u00f6r\u00fcnt\u00fc\r\n**color** : \u015feklin rengi. BGR i\u00e7in tuble olarak ge\u00e7er \u00f6rne\u011fin mavi i\u00e7in (255,0,0) , gri tonlama i\u00e7in sadece say\u0131sal de\u011feri ge\u00e7in.\r\n**thickness** : \u00e7izgi veya \u00e7emberin kal\u0131nl\u0131\u011f\u0131, \u00f6rne\u011fin \u00e7evreler gibi kapal\u0131 \u015fekiller i\u00e7in -1 ge\u00e7erliyse \u015fekli dolduracakt\u0131r. varsay\u0131lan kal\u0131nl\u0131k = 1 dir\r\n**lineType** : \u00e7izginin tipi, 8 ba\u011flant\u0131l\u0131, kenar yumu\u015fatma hatt\u0131 vb. Varsay\u0131lan olarak, 8 ba\u011flant\u0131l\u0131. cv2.LINE_AA, e\u011friler i\u00e7in harika g\u00f6r\u00fcnen kenar yumu\u015fatma hatt\u0131 verir.\r\n\r\n## \u00c7izgi \u00e7izimi\r\nBir \u00e7izgi \u00e7izmek i\u00e7in, \u00e7izginin ba\u015flama ve biti\u015f kordinatlar\u0131n\u0131 vermeniz gerek. Biz bir siyah resim yarataca\u011f\u0131z ve \u00e7izilen mavi \u00e7izgiyi sol \u00fcst k\u00f6\u015feden sa\u011f alt k\u00f6\u015feye bir mavi \u00e7izgi \u00e7izeriz.\r\n\r\n```python\r\nimport numpy as np\r\nimport cv2\r\n\r\n# siyah bir resim yarat\u0131yoruz\r\nimg = np.zeros((512,512,3), np.uint8)\r\n\r\n# 5 px kal\u0131nl\u0131\u011f\u0131nda bir diyagonal mavi \u00e7izgi \u00e7iziyoruz\r\nimg = cv2.line(img,(0,0),(511,511),(255,0,0),5)\r\n```\r\n\r\n## Dikd\u00f6rtgen \u00e7izimi\r\nBir dikd\u00f6rtgen \u00e7izmek i\u00e7in, dikd\u00f6rtgenin \u00fcst-sol k\u00f6\u015fe ve alt-sa\u011f k\u00f6\u015fe'sine ihtiyac\u0131m\u0131z var. Bu defa resmin \u00fcst-sa\u011f k\u00f6\u015fesinde ye\u015fil bir dikd\u00f6rtgen \u00e7izelim.\r\n\r\n```python\r\nimg = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)\r\n```\r\n\r\n## \u00c7ember \u00e7izimi\r\nBir \u00e7ember \u00e7izmek i\u00e7in, merkez koordinatlar\u0131na ve yar\u0131\u00e7ap\u0131na ihtiyac\u0131n\u0131z var, Yukar\u0131da \u00e7izilen dikd\u00f6rtgen i\u00e7ine bir daire \u00e7izece\u011fiz.\r\n\r\n```python\r\nimg = cv2.circle(img,(447,63), 63, (0,0,255), -1)\r\n```\r\n\r\n## Elips \u00e7izimi\r\nBir elips \u00e7izmek i\u00e7in, bir ka\u00e7 arg\u00fcmana ihtiyac\u0131m\u0131z var,\r\n\r\nBirinci arg\u00fcman \u00e7izilmek istenilen resimdir, okunan resim dosyas\u0131 veya okunan video dosyas\u0131n\u0131n anl\u0131k verisidir.\r\nikinci arg\u00fcman, merkez konumu (x,y). \r\n\u00fc\u00e7\u00fcnc\u00fc arg\u00fcman, eksen uzunluklar\u0131d\u0131r (b\u00fcy\u00fck eksen uzunlu\u011fu, k\u00fc\u00e7\u00fck eksen uzunlu\u011fu)\r\n**angle(a\u00e7\u0131)**, elipsin saat y\u00f6n\u00fcn\u00fcn tersine d\u00f6nme a\u00e7\u0131s\u0131d\u0131r **startAngle** ve **endAngle**, elips yay\u0131n\u0131n, ana eksenden saat y\u00f6n\u00fcnde \u00f6l\u00e7\u00fclen ba\u015flang\u0131c\u0131n\u0131 ve biti\u015fini belirtir. Yani 0 ve 360 de\u011ferleri verirse, tam elips verir.\r\n\r\nDaha fazla ayr\u0131nt\u0131 i\u00e7in, **cv2.ellipse()** belgelerine bak\u0131n. A\u015fa\u011f\u0131daki \u00f6rnek, g\u00f6r\u00fcnt\u00fcn\u00fcn merkezinde yar\u0131m elips \u00e7izmektedir.\r\n\r\n```python\r\nimg = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)\r\n```\r\n\r\n## \u00c7okgen \u00c7izim\r\nBir \u00e7okgen \u00e7izmek i\u00e7in \u00f6ncelikle k\u00f6\u015felerin koordinatlar\u0131na ihtiyac\u0131n\u0131z vard\u0131r.Bu noktalar\u0131 bir dizi ( array ) \u015fekil haline getirin, k\u00f6\u015fe say\u0131lar\u0131 olan sat\u0131rlar burada **ROWSx1x2** dir ve **int** t\u00fcr\u00fcnde olmas\u0131 gerekir.\r\n\r\nBurada sar\u0131 renkte d\u00f6rt k\u00f6\u015feli k\u00fc\u00e7\u00fck bir \u00e7okgen \u00e7iziyoruz.\r\n\r\n```python\r\npts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)\r\npts = pts.reshape((-1,1,2))\r\nimg = cv2.polylines(img,[pts],True,(0,255,255))\r\n```\r\n\r\n\u00dc\u00e7\u00fcnc\u00fc arg\u00fcman'\u0131 **False** yaparsan\u0131z, kapal\u0131 bir \u015fekil de\u011fil de t\u00fcm noktalar\u0131 birle\u015ftiren bir \u00e7okgen al\u0131rs\u0131n\u0131z.\r\n\r\n## Resme metin eklemek\r\nMetinleri resimlere yerle\u015ftirmek i\u00e7in a\u015fa\u011f\u0131daki \u015feyleri belirtmeniz gerekir.\r\n\r\nYazmak istedi\u011finiz veri\r\nYaz\u0131lar\u0131 yerle\u015ftirmek istedi\u011finiz yerin kordinatlar\u0131\r\nYaz\u0131 tipi ( font type ) (Desteklenen fontlar i\u00e7in cv2.putText () dok\u00fcmanlar\u0131n\u0131 kontrol edin)\r\nYaz\u0131 tipi \u00d6l\u00e7e\u011fi (yaz\u0131 tipi boyutunu belirtir)\r\nrenk, kal\u0131nl\u0131k, \u00e7izgi t\u00fcr\u00fc vb. d\u00fczenli \u015feyler. Daha iyi g\u00f6r\u00fcnmek i\u00e7in lineType = cv2.LINE_AA \u00f6nerilir.\r\n\u015eimdi resmimize beyaz renkte OpenCV yazal\u0131m.\r\n\r\n```python\r\nfont = cv2.FONT_HERSHEY_SIMPLEX # yaz\u0131 tipimiz\r\ncv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)\r\n# ilk arg\u00fcman yaz\u0131 yazmak istedi\u011fimiz resim( veri )\r\n# ikincisi yaz\u0131lacak olan veri\r\n# \u00fc\u00e7\u00fcnc\u00fc arg\u00fcman kordinatlar\r\n# d\u00f6rd\u00fcnc\u00fc arg\u00fcman fontumuz\r\n# alt\u0131nc\u0131 arg\u00fcman metin rengi\r\n# be\u015finci ve yedinci arg\u00fcman kal\u0131nl\u0131k vs\r\n```\r\n\r\n**Sonu\u00e7**\r\n\r\n<img general=\"center br-4 w-60\" taplet=\"w-90\" src=\"https://www.coogger.com/media/images/drawing.jpg\">"}} |
| parent author | |
| parent permlink | coogger |
| permlink | opencvde-cizim-fonksiyonlar |
| title | Opencv'de Çizim Fonksiyonları |
| Transaction Info | Block #33060396/Trx 9cc9589e91fd0c62adcb726f7f096a8ac7355e26 |
View Raw JSON Data
{
"block": 33060396,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/opencvde-cizim-fonksiyonlar\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/drawing.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/opencvde-cizim-fonksiyonlar\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"circle\", \"rectangle\", \"python\", \"opencv\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"### Hedefler\\r\\n- OpenCV ile farkl\\u0131 geometrik \\u015fekilleri \\u00e7izmeyi \\u00f6\\u011frene\\u00e7e\\u011fiz\\r\\n- Bu fonksiyonlar\\u0131 \\u00f6\\u011frenece\\u011fiz: **cv2.line ()**, **cv2.circle ()**, **cv2.rectangle ()**, **cv2.ellipse ()**, **cv2.putText ()** vb.\\r\\n\\r\\n### Kod\\r\\nYukar\\u0131daki t\\u00fcm fonksiyonlarda , a\\u015fa\\u011f\\u0131da verilen \\u015fekilde ortak arg\\u00fcmanlar g\\u00f6receksiniz.\\r\\n\\r\\n**img** : \\u015fekilleri \\u00e7izmek istedi\\u011finiz g\\u00f6r\\u00fcnt\\u00fc\\r\\n**color** : \\u015feklin rengi. BGR i\\u00e7in tuble olarak ge\\u00e7er \\u00f6rne\\u011fin mavi i\\u00e7in (255,0,0) , gri tonlama i\\u00e7in sadece say\\u0131sal de\\u011feri ge\\u00e7in.\\r\\n**thickness** : \\u00e7izgi veya \\u00e7emberin kal\\u0131nl\\u0131\\u011f\\u0131, \\u00f6rne\\u011fin \\u00e7evreler gibi kapal\\u0131 \\u015fekiller i\\u00e7in -1 ge\\u00e7erliyse \\u015fekli dolduracakt\\u0131r. varsay\\u0131lan kal\\u0131nl\\u0131k = 1 dir\\r\\n**lineType** : \\u00e7izginin tipi, 8 ba\\u011flant\\u0131l\\u0131, kenar yumu\\u015fatma hatt\\u0131 vb. Varsay\\u0131lan olarak, 8 ba\\u011flant\\u0131l\\u0131. cv2.LINE_AA, e\\u011friler i\\u00e7in harika g\\u00f6r\\u00fcnen kenar yumu\\u015fatma hatt\\u0131 verir.\\r\\n\\r\\n## \\u00c7izgi \\u00e7izimi\\r\\nBir \\u00e7izgi \\u00e7izmek i\\u00e7in, \\u00e7izginin ba\\u015flama ve biti\\u015f kordinatlar\\u0131n\\u0131 vermeniz gerek. Biz bir siyah resim yarataca\\u011f\\u0131z ve \\u00e7izilen mavi \\u00e7izgiyi sol \\u00fcst k\\u00f6\\u015feden sa\\u011f alt k\\u00f6\\u015feye bir mavi \\u00e7izgi \\u00e7izeriz.\\r\\n\\r\\n```python\\r\\nimport numpy as np\\r\\nimport cv2\\r\\n\\r\\n# siyah bir resim yarat\\u0131yoruz\\r\\nimg = np.zeros((512,512,3), np.uint8)\\r\\n\\r\\n# 5 px kal\\u0131nl\\u0131\\u011f\\u0131nda bir diyagonal mavi \\u00e7izgi \\u00e7iziyoruz\\r\\nimg = cv2.line(img,(0,0),(511,511),(255,0,0),5)\\r\\n```\\r\\n\\r\\n## Dikd\\u00f6rtgen \\u00e7izimi\\r\\nBir dikd\\u00f6rtgen \\u00e7izmek i\\u00e7in, dikd\\u00f6rtgenin \\u00fcst-sol k\\u00f6\\u015fe ve alt-sa\\u011f k\\u00f6\\u015fe'sine ihtiyac\\u0131m\\u0131z var. Bu defa resmin \\u00fcst-sa\\u011f k\\u00f6\\u015fesinde ye\\u015fil bir dikd\\u00f6rtgen \\u00e7izelim.\\r\\n\\r\\n```python\\r\\nimg = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)\\r\\n```\\r\\n\\r\\n## \\u00c7ember \\u00e7izimi\\r\\nBir \\u00e7ember \\u00e7izmek i\\u00e7in, merkez koordinatlar\\u0131na ve yar\\u0131\\u00e7ap\\u0131na ihtiyac\\u0131n\\u0131z var, Yukar\\u0131da \\u00e7izilen dikd\\u00f6rtgen i\\u00e7ine bir daire \\u00e7izece\\u011fiz.\\r\\n\\r\\n```python\\r\\nimg = cv2.circle(img,(447,63), 63, (0,0,255), -1)\\r\\n```\\r\\n\\r\\n## Elips \\u00e7izimi\\r\\nBir elips \\u00e7izmek i\\u00e7in, bir ka\\u00e7 arg\\u00fcmana ihtiyac\\u0131m\\u0131z var,\\r\\n\\r\\nBirinci arg\\u00fcman \\u00e7izilmek istenilen resimdir, okunan resim dosyas\\u0131 veya okunan video dosyas\\u0131n\\u0131n anl\\u0131k verisidir.\\r\\nikinci arg\\u00fcman, merkez konumu (x,y). \\r\\n\\u00fc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman, eksen uzunluklar\\u0131d\\u0131r (b\\u00fcy\\u00fck eksen uzunlu\\u011fu, k\\u00fc\\u00e7\\u00fck eksen uzunlu\\u011fu)\\r\\n**angle(a\\u00e7\\u0131)**, elipsin saat y\\u00f6n\\u00fcn\\u00fcn tersine d\\u00f6nme a\\u00e7\\u0131s\\u0131d\\u0131r **startAngle** ve **endAngle**, elips yay\\u0131n\\u0131n, ana eksenden saat y\\u00f6n\\u00fcnde \\u00f6l\\u00e7\\u00fclen ba\\u015flang\\u0131c\\u0131n\\u0131 ve biti\\u015fini belirtir. Yani 0 ve 360 de\\u011ferleri verirse, tam elips verir.\\r\\n\\r\\nDaha fazla ayr\\u0131nt\\u0131 i\\u00e7in, **cv2.ellipse()** belgelerine bak\\u0131n. A\\u015fa\\u011f\\u0131daki \\u00f6rnek, g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn merkezinde yar\\u0131m elips \\u00e7izmektedir.\\r\\n\\r\\n```python\\r\\nimg = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)\\r\\n```\\r\\n\\r\\n## \\u00c7okgen \\u00c7izim\\r\\nBir \\u00e7okgen \\u00e7izmek i\\u00e7in \\u00f6ncelikle k\\u00f6\\u015felerin koordinatlar\\u0131na ihtiyac\\u0131n\\u0131z vard\\u0131r.Bu noktalar\\u0131 bir dizi ( array ) \\u015fekil haline getirin, k\\u00f6\\u015fe say\\u0131lar\\u0131 olan sat\\u0131rlar burada **ROWSx1x2** dir ve **int** t\\u00fcr\\u00fcnde olmas\\u0131 gerekir.\\r\\n\\r\\nBurada sar\\u0131 renkte d\\u00f6rt k\\u00f6\\u015feli k\\u00fc\\u00e7\\u00fck bir \\u00e7okgen \\u00e7iziyoruz.\\r\\n\\r\\n```python\\r\\npts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)\\r\\npts = pts.reshape((-1,1,2))\\r\\nimg = cv2.polylines(img,[pts],True,(0,255,255))\\r\\n```\\r\\n\\r\\n\\u00dc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman'\\u0131 **False** yaparsan\\u0131z, kapal\\u0131 bir \\u015fekil de\\u011fil de t\\u00fcm noktalar\\u0131 birle\\u015ftiren bir \\u00e7okgen al\\u0131rs\\u0131n\\u0131z.\\r\\n\\r\\n## Resme metin eklemek\\r\\nMetinleri resimlere yerle\\u015ftirmek i\\u00e7in a\\u015fa\\u011f\\u0131daki \\u015feyleri belirtmeniz gerekir.\\r\\n\\r\\nYazmak istedi\\u011finiz veri\\r\\nYaz\\u0131lar\\u0131 yerle\\u015ftirmek istedi\\u011finiz yerin kordinatlar\\u0131\\r\\nYaz\\u0131 tipi ( font type ) (Desteklenen fontlar i\\u00e7in cv2.putText () dok\\u00fcmanlar\\u0131n\\u0131 kontrol edin)\\r\\nYaz\\u0131 tipi \\u00d6l\\u00e7e\\u011fi (yaz\\u0131 tipi boyutunu belirtir)\\r\\nrenk, kal\\u0131nl\\u0131k, \\u00e7izgi t\\u00fcr\\u00fc vb. d\\u00fczenli \\u015feyler. Daha iyi g\\u00f6r\\u00fcnmek i\\u00e7in lineType = cv2.LINE_AA \\u00f6nerilir.\\r\\n\\u015eimdi resmimize beyaz renkte OpenCV yazal\\u0131m.\\r\\n\\r\\n```python\\r\\nfont = cv2.FONT_HERSHEY_SIMPLEX # yaz\\u0131 tipimiz\\r\\ncv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)\\r\\n# ilk arg\\u00fcman yaz\\u0131 yazmak istedi\\u011fimiz resim( veri )\\r\\n# ikincisi yaz\\u0131lacak olan veri\\r\\n# \\u00fc\\u00e7\\u00fcnc\\u00fc arg\\u00fcman kordinatlar\\r\\n# d\\u00f6rd\\u00fcnc\\u00fc arg\\u00fcman fontumuz\\r\\n# alt\\u0131nc\\u0131 arg\\u00fcman metin rengi\\r\\n# be\\u015finci ve yedinci arg\\u00fcman kal\\u0131nl\\u0131k vs\\r\\n```\\r\\n\\r\\n**Sonu\\u00e7**\\r\\n\\r\\n<img general=\\\"center br-4 w-60\\\" taplet=\\\"w-90\\\" src=\\\"https://www.coogger.com/media/images/drawing.jpg\\\">\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "opencvde-cizim-fonksiyonlar",
"title": "Opencv'de Çizim Fonksiyonları"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:06:27",
"trx_id": "9cc9589e91fd0c62adcb726f7f096a8ac7355e26",
"trx_in_block": 7,
"virtual_op": false
}hakancelikpublished a new post: goruntulerle-ilgili-temel-islemler2019/05/20 02:00:06
hakancelikpublished a new post: goruntulerle-ilgili-temel-islemler
2019/05/20 02:00:06
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/goruntulerle-ilgili-temel-islemler"> <img alt="" src="https://www.coogger.com/media/images/opencv.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/goruntulerle-ilgili-temel-islemler">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "goruntu-islemleri", "numpy", "python", "opencv"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "### Hedefler\r\n- Piksel de\u011ferlerine eri\u015fme ve bunlar\u0131 de\u011fi\u015ftirme\r\n- Resim \u00f6zelliklerine eri\u015fme\r\n- Resim B\u00f6lgesini ( alan\u0131n\u0131 ) Ayarlama (ROI)\r\n- G\u00f6r\u00fcnt\u00fcleri B\u00f6lme ve Birle\u015ftirme\r\n\r\n> Bu b\u00f6l\u00fcmdeki hemen hemen t\u00fcm i\u015flemler esas olarak **OpenCV** yerine **Numpy** ile ilgilidir. **OpenCV** ile daha iyi optimize edilmi\u015f kod yazmak i\u00e7in **Numpy**'nin iyi bir bilgisi gereklidir.\r\n\r\n## Piksel de\u011ferlerine eri\u015fme ve de\u011fi\u015ftirme\r\n\u00d6nce bir renkli resim y\u00fckleyelim:\r\n\r\n```python\r\n>>> import cv2\r\n>>> import numpy as np\r\n\r\n>>> img = cv2.imread('messi5.jpg')\r\n```\r\n\r\nBir piksel de\u011ferine sat\u0131r ve s\u00fctun koordinatlar\u0131yla eri\u015febilirsiniz.BGR g\u00f6r\u00fcnt\u00fcs\u00fc i\u00e7in, Mavi, Ye\u015fil, K\u0131rm\u0131z\u0131 de\u011ferlerin bir dizisini d\u00f6nd\u00fcr\u00fcr.Gri tonlamal\u0131 g\u00f6r\u00fcnt\u00fc i\u00e7in yaln\u0131zca kar\u015f\u0131l\u0131k gelen yo\u011funluk d\u00f6nd\u00fcr\u00fcl\u00fcr.\r\n\r\n```python\r\n>>> px = img[100,100]\r\n>>> print(px)\r\n[157 166 200]\r\n\r\n# sadece mavi pix'ele eri\u015fim\r\n>>> blue = img[100,100,0]\r\n>>> print(blue)\r\n157\r\n```\r\n\r\nPiksel de\u011ferlerini ayn\u0131 \u015fekilde de\u011fi\u015ftirebilirsiniz.\r\n\r\n```python\r\n>>> img[100,100] = [255,255,255]\r\n>>> print(img[100,100])\r\n[255 255 255]\r\n```\r\n\r\n#### Uyar\u0131 \r\n>Numpy, h\u0131zl\u0131 dizi hesaplamalar\u0131 i\u00e7in optimize edilmi\u015f bir k\u00fct\u00fcphanedir. Bu nedenle her piksel de\u011ferine eri\u015fmek ve onu de\u011fi\u015ftirmek \u00e7ok yava\u015f olacakt\u0131r\r\n\r\n#### Not\r\n>Yukar\u0131da bahsedilen y\u00f6ntem normalde dizinin bir b\u00f6lgesini se\u00e7mek i\u00e7in kullan\u0131l\u0131r, \u00f6rne\u011fin ilk 5 s\u0131ra ve son 3 s\u00fctun buna benzer. Tek tek piksel eri\u015fimi i\u00e7in, Numpy dizi y\u00f6ntemleri, array.item () ve array.itemset () daha iyi kabul edilir. Fakat her zaman bir skala d\u00f6nd\u00fcr\u00fcr. Bu nedenle, t\u00fcm B, G, R de\u011ferlerine eri\u015fmek istiyorsan\u0131z, array.item () \u00f6\u011fesini her biri i\u00e7in ayr\u0131 ayr\u0131 \u00e7a\u011f\u0131rman\u0131z gerekir.\r\n\r\nDaha iyi piksel eri\u015fme ve d\u00fczenleme y\u00f6ntemi:\r\n\r\n```python\r\n# k\u0131rm\u0131z\u0131( RED ) de\u011ferine eri\u015fme\r\n>>> img.item(10,10,2)\r\n59\r\n# k\u0131rm\u0131z\u0131 (RED) de\u011feri de\u011fi\u015ftirme\r\n>>> img.itemset((10,10,2),100)\r\n>>> img.item(10,10,2)\r\n100\r\n```\r\n\r\n## Resim \u00d6zelliklerine Eri\u015fme\r\nG\u00f6r\u00fcnt\u00fc \u00f6zellikleri, sat\u0131r say\u0131s\u0131, s\u00fctun ve kanallar, resim verileri t\u00fcr\u00fc, piksel say\u0131s\u0131 vb. I\u00e7erir.\r\n\r\nG\u00f6r\u00fcnt\u00fcn\u00fcn \u015fekline **img.shape** taraf\u0131ndan eri\u015filir. Birka\u00e7 sat\u0131r, s\u00fctun ve kanal say\u0131s\u0131 d\u00f6nd\u00fcr\u00fcr (resim renk ise )\r\n\r\n```python\r\n>>> print(img.shape)\r\n(342, 548, 3)\r\n```\r\n\r\n#### Not \r\n> Resim gri tonlamal\u0131ysa, d\u00f6nd\u00fcr\u00fclen tuple yaln\u0131zca birka\u00e7 sat\u0131r ve s\u00fctun i\u00e7erir. Bu nedenle, y\u00fcklenen g\u00f6r\u00fcnt\u00fcn\u00fcn gri tonlamal\u0131 m\u0131 yoksa renkli g\u00f6r\u00fcnt\u00fc olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in iyi bir y\u00f6ntemdir.\r\n\r\nToplam piksel say\u0131s\u0131na **img.size** ile eri\u015filebilir.\r\n\r\n```python\r\n>>> print(img.size)\r\n562248\r\n```\r\n\r\nresim veri t\u00fcr\u00fc **image.dtype** taraf\u0131ndan elde edilir:\r\n\r\n```python\r\n>>> print(img.dtype)\r\nuint8\r\n``` \r\n\r\n#### Not\r\n\r\n> Hata ay\u0131klarken img.dtype \u00e7ok \u00f6nemlidir, \u00e7\u00fcnk\u00fc OpenCV-Python kodlar\u0131n da \u00e7ok say\u0131da ge\u00e7ersiz veri t\u00fcr\u00fcnden kaynaklanan hata vard\u0131r.\r\n\r\n## Image ROI\r\nBazen, belirli g\u00f6r\u00fcnt\u00fc par\u00e7alar\u0131 ile oynamak zorunda kalacaks\u0131n\u0131z.G\u00f6r\u00fcnt\u00fclerde g\u00f6z alg\u0131lamas\u0131 i\u00e7in \u00f6nce g\u00f6r\u00fcnt\u00fcn\u00fcn y\u00fcz alg\u0131lama i\u015flemini yap\u0131n, daha sonra y\u00fcz b\u00f6lgesi i\u00e7inde g\u00f6zler aran\u0131r. Bu yakla\u015f\u0131m g\u00f6z bulma do\u011frulu\u011funu art\u0131r\u0131r.\r\n\r\nBurada topu se\u00e7ip resmin ba\u015fka bir b\u00f6lgesine kopyalayaca\u011f\u0131m:\r\n```python\r\n>>> ball = img[280:340, 330:390]\r\n>>> img[273:333, 100:160] = ball\r\n```\r\n\r\n<img general=\"center br-2\" title=\"opencv\" src=\"https://www.coogger.com/media/images/opencv.jpg\">\r\n\r\n## G\u00f6r\u00fcnt\u00fc Kanallar\u0131n\u0131n Ayr\u0131lmas\u0131 ve Birle\u015ftirilmesi\r\nGerekti\u011finde bir g\u00f6r\u00fcnt\u00fcn\u00fcn B, G,R kanallar\u0131, tek tek d\u00fczlemlerine ayr\u0131labilir. Sonra, bireysel kanallar yine BGR g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc olu\u015fturmak \u00fczere bir araya birle\u015ftirilebilir.\r\n```python\r\n>>> b,g,r = cv2.split(img)\r\n>>> img = cv2.merge((b,g,r))\r\n# veya\r\n>>> b = img[:,:,0]\r\n# Diyelim ki, t\u00fcm k\u0131rm\u0131z\u0131 pikselleri s\u0131f\u0131rlamak istiyorsan,\r\n# bunu yapmana gerek yok. Daha h\u0131zl\u0131 olan Numpy'i kullanabilirsiniz.\r\n\r\n>>> img[:,:,2] = 0\r\n```\r\n#### Not\r\n\r\n> **cv2.split()** uzun s\u011fren bir i\u015flemdir , bu nedenle yaln\u0131zca gerekirse kullan\u0131n. **Numpy** \u00e7ok daha verimlidir.\r\n\r\n## Resimler i\u00e7in S\u0131n\u0131rlar Olu\u015fturma (Padding)\r\nG\u00f6r\u00fcnt\u00fcn\u00fcn etraf\u0131nda, foto\u011fraf \u00e7er\u00e7evesi gibi bir \u00e7er\u00e7eve olu\u015fturmak istiyorsan\u0131z **cv2.copyMakeBorder()** i\u015flevini kullanabilirsiniz. Ancak konvol\u00fcsyon i\u015flemi, s\u0131f\u0131r doldurma vb. I\u00e7in daha fazla uygulama vard\u0131r. Bu i\u015flev a\u015fa\u011f\u0131daki arg\u00fcmanlar\u0131 al\u0131r:\r\n\r\n- ***src*** - input image ( resim girdisi )\r\n- ***top, bottom, left, right*** - \u00fcst, alt, sol, sa\u011f kenarl\u0131k geni\u015fli\u011fi ilgili y\u00f6ndeki piksel say\u0131s\u0131na g\u00f6re\r\n- ***borderType*** - Hangi s\u0131n\u0131r\u0131n eklenece\u011fini tan\u0131mlayan k\u0131s\u0131m. \u015eu t\u00fcrlerden biri olabilir:\r\n- ***cv2.BORDER_CONSTAN***T - Sabit renkli bir kenarl\u0131k ekler. De\u011fer sonraki arg\u00fcman olarak verilmelidir.\r\n- ***cv2.BORDER_REFLECT*** -Kenarl\u0131k, s\u0131n\u0131r \u00f6\u011felerinin ayna yans\u0131mas\u0131 olacakt\u0131r bunun gibi: fedcba | abcdefgh | hgfedcb\r\n- ***cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT*** - Yukar\u0131dakiyle ayn\u0131, ancak \u015fu \u015fekilde hafif bir de\u011fi\u015fiklikle: gfedcb | abcdefgh | gfedcba\r\n- ***cv2.BORDER_REPLICATE*** - Son \u00f6\u011fe, \u015fu \u015fekilde \u00e7o\u011falt\u0131l\u0131r: aaaaaa | abcdefgh | hhhhhhh\r\n- ***cv2.BORDER_WRAP*** -A\u00e7\u0131klayam\u0131yorum, \u015funa benzeyecektir: cdefgh | abcdefgh | abcdefg\r\n- ***value*** - Kenarl\u0131k t\u00fcr\u00fcn\u00fcn cv2.BORDER_CONSTANT olmas\u0131 durumunda kenarl\u0131k rengi\r\n\r\nDaha iyi anlamak i\u00e7in t\u00fcm bu kenarl\u0131k t\u00fcrlerini g\u00f6steren \u00f6rnek bir kod a\u015fa\u011f\u0131dad\u0131r:\r\n```python\r\nimport cv2\r\nimport numpy as np\r\nfrom matplotlib import pyplot as plt\r\n\r\nBLUE = [255,0,0]\r\n\r\nimg1 = cv2.imread('opencv_logo.png')\r\n\r\nreplicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)\r\nreflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)\r\nreflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)\r\nwrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)\r\nconstant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)\r\n\r\nplt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')\r\nplt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')\r\nplt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')\r\nplt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')\r\nplt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')\r\nplt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')\r\n\r\nplt.show()\r\n```\r\nA\u015fa\u011f\u0131daki sonuca bak\u0131n, ( Resim **matplotlib** ile g\u00f6sterilir, b\u00f6ylece KIRMIZI ve MAV\u0130'ler de\u011fi\u015f toku\u015f olur );\r\n\r\n<img general=\"center br-4\" title=\"opencv\" src=\"https://www.coogger.com/media/images/opencv_5MHKX6N.jpg\">"}} |
| parent author | |
| parent permlink | coogger |
| permlink | goruntulerle-ilgili-temel-islemler |
| title | Görüntülerle İlgili Temel İşlemler |
| Transaction Info | Block #33060269/Trx af6e38551828d183cd241f41157313d26982f95e |
View Raw JSON Data
{
"block": 33060269,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntulerle-ilgili-temel-islemler\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/opencv.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/goruntulerle-ilgili-temel-islemler\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"goruntu-islemleri\", \"numpy\", \"python\", \"opencv\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"### Hedefler\\r\\n- Piksel de\\u011ferlerine eri\\u015fme ve bunlar\\u0131 de\\u011fi\\u015ftirme\\r\\n- Resim \\u00f6zelliklerine eri\\u015fme\\r\\n- Resim B\\u00f6lgesini ( alan\\u0131n\\u0131 ) Ayarlama (ROI)\\r\\n- G\\u00f6r\\u00fcnt\\u00fcleri B\\u00f6lme ve Birle\\u015ftirme\\r\\n\\r\\n> Bu b\\u00f6l\\u00fcmdeki hemen hemen t\\u00fcm i\\u015flemler esas olarak **OpenCV** yerine **Numpy** ile ilgilidir. **OpenCV** ile daha iyi optimize edilmi\\u015f kod yazmak i\\u00e7in **Numpy**'nin iyi bir bilgisi gereklidir.\\r\\n\\r\\n## Piksel de\\u011ferlerine eri\\u015fme ve de\\u011fi\\u015ftirme\\r\\n\\u00d6nce bir renkli resim y\\u00fckleyelim:\\r\\n\\r\\n```python\\r\\n>>> import cv2\\r\\n>>> import numpy as np\\r\\n\\r\\n>>> img = cv2.imread('messi5.jpg')\\r\\n```\\r\\n\\r\\nBir piksel de\\u011ferine sat\\u0131r ve s\\u00fctun koordinatlar\\u0131yla eri\\u015febilirsiniz.BGR g\\u00f6r\\u00fcnt\\u00fcs\\u00fc i\\u00e7in, Mavi, Ye\\u015fil, K\\u0131rm\\u0131z\\u0131 de\\u011ferlerin bir dizisini d\\u00f6nd\\u00fcr\\u00fcr.Gri tonlamal\\u0131 g\\u00f6r\\u00fcnt\\u00fc i\\u00e7in yaln\\u0131zca kar\\u015f\\u0131l\\u0131k gelen yo\\u011funluk d\\u00f6nd\\u00fcr\\u00fcl\\u00fcr.\\r\\n\\r\\n```python\\r\\n>>> px = img[100,100]\\r\\n>>> print(px)\\r\\n[157 166 200]\\r\\n\\r\\n# sadece mavi pix'ele eri\\u015fim\\r\\n>>> blue = img[100,100,0]\\r\\n>>> print(blue)\\r\\n157\\r\\n```\\r\\n\\r\\nPiksel de\\u011ferlerini ayn\\u0131 \\u015fekilde de\\u011fi\\u015ftirebilirsiniz.\\r\\n\\r\\n```python\\r\\n>>> img[100,100] = [255,255,255]\\r\\n>>> print(img[100,100])\\r\\n[255 255 255]\\r\\n```\\r\\n\\r\\n#### Uyar\\u0131 \\r\\n>Numpy, h\\u0131zl\\u0131 dizi hesaplamalar\\u0131 i\\u00e7in optimize edilmi\\u015f bir k\\u00fct\\u00fcphanedir. Bu nedenle her piksel de\\u011ferine eri\\u015fmek ve onu de\\u011fi\\u015ftirmek \\u00e7ok yava\\u015f olacakt\\u0131r\\r\\n\\r\\n#### Not\\r\\n>Yukar\\u0131da bahsedilen y\\u00f6ntem normalde dizinin bir b\\u00f6lgesini se\\u00e7mek i\\u00e7in kullan\\u0131l\\u0131r, \\u00f6rne\\u011fin ilk 5 s\\u0131ra ve son 3 s\\u00fctun buna benzer. Tek tek piksel eri\\u015fimi i\\u00e7in, Numpy dizi y\\u00f6ntemleri, array.item () ve array.itemset () daha iyi kabul edilir. Fakat her zaman bir skala d\\u00f6nd\\u00fcr\\u00fcr. Bu nedenle, t\\u00fcm B, G, R de\\u011ferlerine eri\\u015fmek istiyorsan\\u0131z, array.item () \\u00f6\\u011fesini her biri i\\u00e7in ayr\\u0131 ayr\\u0131 \\u00e7a\\u011f\\u0131rman\\u0131z gerekir.\\r\\n\\r\\nDaha iyi piksel eri\\u015fme ve d\\u00fczenleme y\\u00f6ntemi:\\r\\n\\r\\n```python\\r\\n# k\\u0131rm\\u0131z\\u0131( RED ) de\\u011ferine eri\\u015fme\\r\\n>>> img.item(10,10,2)\\r\\n59\\r\\n# k\\u0131rm\\u0131z\\u0131 (RED) de\\u011feri de\\u011fi\\u015ftirme\\r\\n>>> img.itemset((10,10,2),100)\\r\\n>>> img.item(10,10,2)\\r\\n100\\r\\n```\\r\\n\\r\\n## Resim \\u00d6zelliklerine Eri\\u015fme\\r\\nG\\u00f6r\\u00fcnt\\u00fc \\u00f6zellikleri, sat\\u0131r say\\u0131s\\u0131, s\\u00fctun ve kanallar, resim verileri t\\u00fcr\\u00fc, piksel say\\u0131s\\u0131 vb. I\\u00e7erir.\\r\\n\\r\\nG\\u00f6r\\u00fcnt\\u00fcn\\u00fcn \\u015fekline **img.shape** taraf\\u0131ndan eri\\u015filir. Birka\\u00e7 sat\\u0131r, s\\u00fctun ve kanal say\\u0131s\\u0131 d\\u00f6nd\\u00fcr\\u00fcr (resim renk ise )\\r\\n\\r\\n```python\\r\\n>>> print(img.shape)\\r\\n(342, 548, 3)\\r\\n```\\r\\n\\r\\n#### Not \\r\\n> Resim gri tonlamal\\u0131ysa, d\\u00f6nd\\u00fcr\\u00fclen tuple yaln\\u0131zca birka\\u00e7 sat\\u0131r ve s\\u00fctun i\\u00e7erir. Bu nedenle, y\\u00fcklenen g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn gri tonlamal\\u0131 m\\u0131 yoksa renkli g\\u00f6r\\u00fcnt\\u00fc olup olmad\\u0131\\u011f\\u0131n\\u0131 kontrol etmek i\\u00e7in iyi bir y\\u00f6ntemdir.\\r\\n\\r\\nToplam piksel say\\u0131s\\u0131na **img.size** ile eri\\u015filebilir.\\r\\n\\r\\n```python\\r\\n>>> print(img.size)\\r\\n562248\\r\\n```\\r\\n\\r\\nresim veri t\\u00fcr\\u00fc **image.dtype** taraf\\u0131ndan elde edilir:\\r\\n\\r\\n```python\\r\\n>>> print(img.dtype)\\r\\nuint8\\r\\n``` \\r\\n\\r\\n#### Not\\r\\n\\r\\n> Hata ay\\u0131klarken img.dtype \\u00e7ok \\u00f6nemlidir, \\u00e7\\u00fcnk\\u00fc OpenCV-Python kodlar\\u0131n da \\u00e7ok say\\u0131da ge\\u00e7ersiz veri t\\u00fcr\\u00fcnden kaynaklanan hata vard\\u0131r.\\r\\n\\r\\n## Image ROI\\r\\nBazen, belirli g\\u00f6r\\u00fcnt\\u00fc par\\u00e7alar\\u0131 ile oynamak zorunda kalacaks\\u0131n\\u0131z.G\\u00f6r\\u00fcnt\\u00fclerde g\\u00f6z alg\\u0131lamas\\u0131 i\\u00e7in \\u00f6nce g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn y\\u00fcz alg\\u0131lama i\\u015flemini yap\\u0131n, daha sonra y\\u00fcz b\\u00f6lgesi i\\u00e7inde g\\u00f6zler aran\\u0131r. Bu yakla\\u015f\\u0131m g\\u00f6z bulma do\\u011frulu\\u011funu art\\u0131r\\u0131r.\\r\\n\\r\\nBurada topu se\\u00e7ip resmin ba\\u015fka bir b\\u00f6lgesine kopyalayaca\\u011f\\u0131m:\\r\\n```python\\r\\n>>> ball = img[280:340, 330:390]\\r\\n>>> img[273:333, 100:160] = ball\\r\\n```\\r\\n\\r\\n<img general=\\\"center br-2\\\" title=\\\"opencv\\\" src=\\\"https://www.coogger.com/media/images/opencv.jpg\\\">\\r\\n\\r\\n## G\\u00f6r\\u00fcnt\\u00fc Kanallar\\u0131n\\u0131n Ayr\\u0131lmas\\u0131 ve Birle\\u015ftirilmesi\\r\\nGerekti\\u011finde bir g\\u00f6r\\u00fcnt\\u00fcn\\u00fcn B, G,R kanallar\\u0131, tek tek d\\u00fczlemlerine ayr\\u0131labilir. Sonra, bireysel kanallar yine BGR g\\u00f6r\\u00fcnt\\u00fcs\\u00fcn\\u00fc olu\\u015fturmak \\u00fczere bir araya birle\\u015ftirilebilir.\\r\\n```python\\r\\n>>> b,g,r = cv2.split(img)\\r\\n>>> img = cv2.merge((b,g,r))\\r\\n# veya\\r\\n>>> b = img[:,:,0]\\r\\n# Diyelim ki, t\\u00fcm k\\u0131rm\\u0131z\\u0131 pikselleri s\\u0131f\\u0131rlamak istiyorsan,\\r\\n# bunu yapmana gerek yok. Daha h\\u0131zl\\u0131 olan Numpy'i kullanabilirsiniz.\\r\\n\\r\\n>>> img[:,:,2] = 0\\r\\n```\\r\\n#### Not\\r\\n\\r\\n> **cv2.split()** uzun s\\u011fren bir i\\u015flemdir , bu nedenle yaln\\u0131zca gerekirse kullan\\u0131n. **Numpy** \\u00e7ok daha verimlidir.\\r\\n\\r\\n## Resimler i\\u00e7in S\\u0131n\\u0131rlar Olu\\u015fturma (Padding)\\r\\nG\\u00f6r\\u00fcnt\\u00fcn\\u00fcn etraf\\u0131nda, foto\\u011fraf \\u00e7er\\u00e7evesi gibi bir \\u00e7er\\u00e7eve olu\\u015fturmak istiyorsan\\u0131z **cv2.copyMakeBorder()** i\\u015flevini kullanabilirsiniz. Ancak konvol\\u00fcsyon i\\u015flemi, s\\u0131f\\u0131r doldurma vb. I\\u00e7in daha fazla uygulama vard\\u0131r. Bu i\\u015flev a\\u015fa\\u011f\\u0131daki arg\\u00fcmanlar\\u0131 al\\u0131r:\\r\\n\\r\\n- ***src*** - input image ( resim girdisi )\\r\\n- ***top, bottom, left, right*** - \\u00fcst, alt, sol, sa\\u011f kenarl\\u0131k geni\\u015fli\\u011fi ilgili y\\u00f6ndeki piksel say\\u0131s\\u0131na g\\u00f6re\\r\\n- ***borderType*** - Hangi s\\u0131n\\u0131r\\u0131n eklenece\\u011fini tan\\u0131mlayan k\\u0131s\\u0131m. \\u015eu t\\u00fcrlerden biri olabilir:\\r\\n- ***cv2.BORDER_CONSTAN***T - Sabit renkli bir kenarl\\u0131k ekler. De\\u011fer sonraki arg\\u00fcman olarak verilmelidir.\\r\\n- ***cv2.BORDER_REFLECT*** -Kenarl\\u0131k, s\\u0131n\\u0131r \\u00f6\\u011felerinin ayna yans\\u0131mas\\u0131 olacakt\\u0131r bunun gibi: fedcba | abcdefgh | hgfedcb\\r\\n- ***cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT*** - Yukar\\u0131dakiyle ayn\\u0131, ancak \\u015fu \\u015fekilde hafif bir de\\u011fi\\u015fiklikle: gfedcb | abcdefgh | gfedcba\\r\\n- ***cv2.BORDER_REPLICATE*** - Son \\u00f6\\u011fe, \\u015fu \\u015fekilde \\u00e7o\\u011falt\\u0131l\\u0131r: aaaaaa | abcdefgh | hhhhhhh\\r\\n- ***cv2.BORDER_WRAP*** -A\\u00e7\\u0131klayam\\u0131yorum, \\u015funa benzeyecektir: cdefgh | abcdefgh | abcdefg\\r\\n- ***value*** - Kenarl\\u0131k t\\u00fcr\\u00fcn\\u00fcn cv2.BORDER_CONSTANT olmas\\u0131 durumunda kenarl\\u0131k rengi\\r\\n\\r\\nDaha iyi anlamak i\\u00e7in t\\u00fcm bu kenarl\\u0131k t\\u00fcrlerini g\\u00f6steren \\u00f6rnek bir kod a\\u015fa\\u011f\\u0131dad\\u0131r:\\r\\n```python\\r\\nimport cv2\\r\\nimport numpy as np\\r\\nfrom matplotlib import pyplot as plt\\r\\n\\r\\nBLUE = [255,0,0]\\r\\n\\r\\nimg1 = cv2.imread('opencv_logo.png')\\r\\n\\r\\nreplicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)\\r\\nreflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)\\r\\nreflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)\\r\\nwrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)\\r\\nconstant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)\\r\\n\\r\\nplt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')\\r\\nplt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')\\r\\nplt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')\\r\\nplt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')\\r\\nplt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')\\r\\nplt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')\\r\\n\\r\\nplt.show()\\r\\n```\\r\\nA\\u015fa\\u011f\\u0131daki sonuca bak\\u0131n, ( Resim **matplotlib** ile g\\u00f6sterilir, b\\u00f6ylece KIRMIZI ve MAV\\u0130'ler de\\u011fi\\u015f toku\\u015f olur );\\r\\n\\r\\n<img general=\\\"center br-4\\\" title=\\\"opencv\\\" src=\\\"https://www.coogger.com/media/images/opencv_5MHKX6N.jpg\\\">\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "goruntulerle-ilgili-temel-islemler",
"title": "Görüntülerle İlgili Temel İşlemler"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T02:00:06",
"trx_id": "af6e38551828d183cd241f41157313d26982f95e",
"trx_in_block": 12,
"virtual_op": false
}hakancelikpublished a new post: sozluk-veri-tipini-python-nesnesine-donusturme2019/05/20 01:58:03
hakancelikpublished a new post: sozluk-veri-tipini-python-nesnesine-donusturme
2019/05/20 01:58:03
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme"> <img alt="" src="https://www.coogger.com/media/images/python.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "python"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "[TOC]\r\n\r\n<img gnrl=\"center br-4\" src=\"https://www.coogger.com/media/images/python.jpg\">\r\n<center><sub>[Kaynak](http://alikara.com)</sub></center>\r\n\r\n\r\n### Neler \u00f6\u011frenece\u011fiz ?\r\n- python s\u0131n\u0131f yap\u0131s\u0131 ( class )\r\n- isinstance\r\n```\r\n>>> type(isinstance)\r\n<class 'builtin_function_or_method'>\r\n```\r\n- setattr\r\n```\r\n>>> type(setattr)\r\n<class 'builtin_function_or_method'>\r\n```\r\n- items\r\nBildi\u011finiz gibi items dict veri t\u00fcr\u00fcndeki de\u011fi\u015fkenlerin \u00f6\u011felerini almak i\u00e7in kullan\u0131r\u0131z \u00f6rne\u011fin.\r\n```python\r\nfor key,value in {1:2,3:4}.items():\r\n\tprint(key,value)\r\n```\r\n\r\n### Gereksinimler\r\n- sadece python3\r\n> python 2 ise g\u00fcnceli takip etmek i\u00e7in python3 kullanmaya ba\u015flay\u0131n\r\n\r\n\r\n\r\n### Isinstance nedir ?\r\nisinstance,t\u0131pk\u0131 type methodu gibi nesnelerin t\u00fcr\u00fcn\u00fc bulmam\u0131z\u0131 ve bu bilgiyi kullanmam\u0131z\u0131 sa\u011flar,\r\n\r\n\u00f6rne\u011fin;\r\n\r\n```python\r\nnum = 0\r\nif type(num) == int: # num de\u011fi\u015fkenin veri t\u00fcr\u00fc e\u011fer integer ise\r\n\tpass\r\n```\r\n\r\nAyn\u0131 \u015feyi **isinstance** ile \u015fu \u015fekilde yapabiliyoruz.\r\n\r\n```python\r\nnumn = 0\r\nif isinstance(num,int):\r\n\tpass\r\n\r\n# veya \r\n\r\nnumn = 0\r\nif isinstance(num,(int,str)):\r\n\tpass\r\n```\r\n\u015eeklinde yapabiliyoruz, bu k\u0131s\u0131m anla\u015f\u0131lm\u0131\u015ft\u0131r umar\u0131m.\r\n\r\n### Setattr nedir ?\r\n\r\n**setattr** bir nesneye yeni bir de\u011fi\u015fken atamam\u0131z\u0131 sa\u011flar, kullan\u0131m\u0131 \u015fu \u015fekilde dir. `setattr(object, name, value)`\r\n>bunlar\u0131 bildi\u011fimize g\u00f6re as\u0131l konumuza gelebiliriz.\r\n\r\n\r\n## S\u00f6zl\u00fck veri tipini ( Dict ) python nesnesine d\u00f6n\u00fc\u015ft\u00fcrme\r\nBizlerin yapmak istedi\u011fi \u015fey \u015fu elimizde \u015fuan benzer bir dict olsun\r\n\r\n`d = {\"a\":\"b\",\"c\":\"d\"}`\r\nBiz python ile bu s\u00f6zl\u00fck veri t\u00fcr\u00fcn\u00fc \u015fu \u015fekilde kullanamay\u0131z,\r\n\r\n```python\r\n>>> d = {\"a\":\"b\",\"c\":\"d\"}\r\n>>> d.a\r\nTraceback (most recent call last):\r\n File \"<stdin>\", line 1, in <module>\r\nAttributeError: 'dict' object has no attribute 'a'\r\n```\r\n\r\n**AttributeError: 'dict' object has no attribute 'a'** bizlere bu \u015fekilde bir hata verecektir, o zaman yapmam\u0131z gereken \u015fey ***attribute*** etmek.\r\n\r\nKodlar\u0131m\u0131z\u0131n tamam\u0131.\r\n```python\r\nclass DictToObject():\r\n def __init__(self, d):\r\n for key, value in d.items():\r\n if isinstance(value, (list, tuple)):\r\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\r\n else:\r\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\r\n```\r\n\u015eimdi burada bir for d\u00f6ng\u00fcs\u00fc var sebebi \u015fu, e\u011fer **DictToObject** s\u0131n\u0131f\u0131m\u0131za verece\u011fimiz s\u00f6zl\u00fck \u015fu \u015fekilde ise\r\n`d = {'a': 1, 'b': {'c': 2}, 'd': [\"hi\", {'foo': \"bar\"}]}` for d\u00f6ng\u00fcs\u00fc ile i\u00e7 i\u00e7e bulunan dict leri de s\u0131n\u0131f\u0131m\u0131za attribute edebilmektir bu k\u0131s\u0131mlar\u0131da tam olarak **5. ve 7.** sat\u0131rlarda yap\u0131l\u0131yor, yorum sat\u0131rlar\u0131n\u0131 kullanarak kodlar\u0131 ba\u015ftan sona anlatay\u0131m.\r\n\r\n--------\r\n\r\n```python\r\nclass DictToObject(): # s\u0131n\u0131f\u0131m\u0131z\u0131n ismi DictToObject\r\n def __init__(self, d): # d ad\u0131 ile bir parametre belirliyoruz.\r\n for key, value in d.items(): # yukar\u0131da itemi anlatt\u0131\u011f\u0131m k\u0131s\u0131m burada\r\n if isinstance(value, (list, tuple)): # isinstance ile gelen value list veya tuble ise,\r\n\t\t\t\t# yani [] veya () \u015feklinde birden fazla de\u011fer var ise\r\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\r\n\t\t\t # setattr kullanarak ilk parametresine yani nesne yazmam\u0131z gereken yere self yaz\u0131yoruz bu bulundu\u011fumuz s\u0131n\u0131fa ekleme yapmas\u0131n\u0131 sa\u011flayacakt\u0131r. ikinci parametre dict'den gelen key bilgisi ve value k\u0131sm\u0131 ise \u00fc\u00e7\u00fcnc\u00fc parameter fakat buradaki olay \u015fu gelen value list veya tuble oldu\u011fu i\u00e7in for i\u00e7ine al\u0131yoruz **for x in value** ve demi\u015fki **if isinstance(x, dict) ** e\u011fer for ile gelen veri dict ise tekrardan **DictToObject** s\u0131n\u0131f\u0131m\u0131za at\u0131yoruz ve ayn\u0131 \u015feyler onun i\u00e7in devam ediyor ve burada value yerine attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz **else x** bu k\u0131s\u0131m ise e\u011fer dict de\u011fil ise direk for ile gelen de\u011feri direk setattr ile class i\u00e7ine i\u015fle diyoruz.\r\n else:\r\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\r\n\t\t\t #bu k\u0131s\u0131m ise yukarda e\u011fer value dict veya tuble de\u011fil ise buras\u0131 \u00e7al\u0131\u015f\u0131r.\r\n\t\t\t # burda da gelen de\u011fi\u015fken *if isinstance(value, dict)* dict ise **DictToObject** tekrandan s\u0131n\u0131f\u0131m\u0131za geri g\u00f6nderileri ve i\u015flemler tekrar eder ve burada yine attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz, e\u011fer dict de\u011filsede *else value* direk value de\u011ferini **setattr** ile s\u0131n\u0131fa i\u015fler.\r\n```\r\n\r\nBiraz kar\u0131\u015f\u0131k oldu, ama dikkatl\u0131 inceler ve okursan\u0131z anlayaca\u011f\u0131n\u0131z\u0131 tahmin ediyorum, bu kod ( s\u0131n\u0131f ) benim \u00e7ok i\u015fime yarayacak sizlerede anlatmak istedim.\r\n\r\n### Nas\u0131l kullan\u0131l\u0131r ? \r\nKodun \u00e7\u0131kt\u0131s\u0131n\u0131 a\u00e7\u0131kl\u0131yorum, \u00f6rnek ile anlatal\u0131m.\r\n\r\n```python\r\n>>> d = {\"a\": \"b\", \"c\": {\"d\": \"e\"}, \"f\": [\"hi\", {\"foo\": \"bar\"}]}\r\n>>> x = DictToObject(d)\r\n>>> x.c.d\r\ne\r\n>>> x.f[1].foo #bu k\u0131s\u0131m nas\u0131l oldu derseniz \r\n'bar'\r\n# \"f\": [\"hi\", {\"foo\": \"bar\"}] bu k\u0131s\u0131m list oldu\u011fu i\u00e7in ve i\u00e7inde dict oldu\u011fu i\u00e7in yukar\u0131da anlatt\u0131\u011f\u0131m \r\n# attr olarak s\u0131n\u0131f g\u00f6ndermi\u015f oluyoruz dedi\u011fim olaylar ger\u00e7ekle\u015fiyor. \r\n# yani bu \u015fekilde setattr(self, key, DictToObject(value))\r\n# bu \u015fekilde de\u011fil setattr(self, key, value)\r\n\r\n>>> x.__dict__ # bu \u015fekilde yaparak s\u0131n\u0131f i\u00e7indeki dict leri yani nesneleri g\u00f6rebilirsiniz.\r\n{'a': 'b', 'c': <__main__.DictToObject object at 0x0000025095AB45C0>, 'f': ['hi', <__main__.DictToObject object at 0x0000025095AB45F8>]}\r\n# burdan bak\u0131n normalde x.a yap\u0131nca b c\u0131kt\u0131s\u0131n\u0131 al\u0131r\u0131z fakat x.c yap\u0131nca bize yine s\u0131n\u0131f d\u00f6nd\u00fcrecektir yada \r\n# x.f yap\u0131nca bize bir liste d\u00f6nd\u00fcrecektir bu listenin 1. eleman\u0131 ise yine bir s\u0131n\u0131ft\u0131r.\r\n```"}} |
| parent author | |
| parent permlink | coogger |
| permlink | sozluk-veri-tipini-python-nesnesine-donusturme |
| title | Sözlük veri tipini python nesnesine dönüştürme |
| Transaction Info | Block #33060228/Trx cda0552a6e56ee51d4b91f7d435137eec8390203 |
View Raw JSON Data
{
"block": 33060228,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme\">\n\n\n <img alt=\"\" src=\"https://www.coogger.com/media/images/python.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/sozluk-veri-tipini-python-nesnesine-donusturme\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"python\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"[TOC]\\r\\n\\r\\n<img gnrl=\\\"center br-4\\\" src=\\\"https://www.coogger.com/media/images/python.jpg\\\">\\r\\n<center><sub>[Kaynak](http://alikara.com)</sub></center>\\r\\n\\r\\n\\r\\n### Neler \\u00f6\\u011frenece\\u011fiz ?\\r\\n- python s\\u0131n\\u0131f yap\\u0131s\\u0131 ( class )\\r\\n- isinstance\\r\\n```\\r\\n>>> type(isinstance)\\r\\n<class 'builtin_function_or_method'>\\r\\n```\\r\\n- setattr\\r\\n```\\r\\n>>> type(setattr)\\r\\n<class 'builtin_function_or_method'>\\r\\n```\\r\\n- items\\r\\nBildi\\u011finiz gibi items dict veri t\\u00fcr\\u00fcndeki de\\u011fi\\u015fkenlerin \\u00f6\\u011felerini almak i\\u00e7in kullan\\u0131r\\u0131z \\u00f6rne\\u011fin.\\r\\n```python\\r\\nfor key,value in {1:2,3:4}.items():\\r\\n\\tprint(key,value)\\r\\n```\\r\\n\\r\\n### Gereksinimler\\r\\n- sadece python3\\r\\n> python 2 ise g\\u00fcnceli takip etmek i\\u00e7in python3 kullanmaya ba\\u015flay\\u0131n\\r\\n\\r\\n\\r\\n\\r\\n### Isinstance nedir ?\\r\\nisinstance,t\\u0131pk\\u0131 type methodu gibi nesnelerin t\\u00fcr\\u00fcn\\u00fc bulmam\\u0131z\\u0131 ve bu bilgiyi kullanmam\\u0131z\\u0131 sa\\u011flar,\\r\\n\\r\\n\\u00f6rne\\u011fin;\\r\\n\\r\\n```python\\r\\nnum = 0\\r\\nif type(num) == int: # num de\\u011fi\\u015fkenin veri t\\u00fcr\\u00fc e\\u011fer integer ise\\r\\n\\tpass\\r\\n```\\r\\n\\r\\nAyn\\u0131 \\u015feyi **isinstance** ile \\u015fu \\u015fekilde yapabiliyoruz.\\r\\n\\r\\n```python\\r\\nnumn = 0\\r\\nif isinstance(num,int):\\r\\n\\tpass\\r\\n\\r\\n# veya \\r\\n\\r\\nnumn = 0\\r\\nif isinstance(num,(int,str)):\\r\\n\\tpass\\r\\n```\\r\\n\\u015eeklinde yapabiliyoruz, bu k\\u0131s\\u0131m anla\\u015f\\u0131lm\\u0131\\u015ft\\u0131r umar\\u0131m.\\r\\n\\r\\n### Setattr nedir ?\\r\\n\\r\\n**setattr** bir nesneye yeni bir de\\u011fi\\u015fken atamam\\u0131z\\u0131 sa\\u011flar, kullan\\u0131m\\u0131 \\u015fu \\u015fekilde dir. `setattr(object, name, value)`\\r\\n>bunlar\\u0131 bildi\\u011fimize g\\u00f6re as\\u0131l konumuza gelebiliriz.\\r\\n\\r\\n\\r\\n## S\\u00f6zl\\u00fck veri tipini ( Dict ) python nesnesine d\\u00f6n\\u00fc\\u015ft\\u00fcrme\\r\\nBizlerin yapmak istedi\\u011fi \\u015fey \\u015fu elimizde \\u015fuan benzer bir dict olsun\\r\\n\\r\\n`d = {\\\"a\\\":\\\"b\\\",\\\"c\\\":\\\"d\\\"}`\\r\\nBiz python ile bu s\\u00f6zl\\u00fck veri t\\u00fcr\\u00fcn\\u00fc \\u015fu \\u015fekilde kullanamay\\u0131z,\\r\\n\\r\\n```python\\r\\n>>> d = {\\\"a\\\":\\\"b\\\",\\\"c\\\":\\\"d\\\"}\\r\\n>>> d.a\\r\\nTraceback (most recent call last):\\r\\n File \\\"<stdin>\\\", line 1, in <module>\\r\\nAttributeError: 'dict' object has no attribute 'a'\\r\\n```\\r\\n\\r\\n**AttributeError: 'dict' object has no attribute 'a'** bizlere bu \\u015fekilde bir hata verecektir, o zaman yapmam\\u0131z gereken \\u015fey ***attribute*** etmek.\\r\\n\\r\\nKodlar\\u0131m\\u0131z\\u0131n tamam\\u0131.\\r\\n```python\\r\\nclass DictToObject():\\r\\n def __init__(self, d):\\r\\n for key, value in d.items():\\r\\n if isinstance(value, (list, tuple)):\\r\\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\\r\\n else:\\r\\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\\r\\n```\\r\\n\\u015eimdi burada bir for d\\u00f6ng\\u00fcs\\u00fc var sebebi \\u015fu, e\\u011fer **DictToObject** s\\u0131n\\u0131f\\u0131m\\u0131za verece\\u011fimiz s\\u00f6zl\\u00fck \\u015fu \\u015fekilde ise\\r\\n`d = {'a': 1, 'b': {'c': 2}, 'd': [\\\"hi\\\", {'foo': \\\"bar\\\"}]}` for d\\u00f6ng\\u00fcs\\u00fc ile i\\u00e7 i\\u00e7e bulunan dict leri de s\\u0131n\\u0131f\\u0131m\\u0131za attribute edebilmektir bu k\\u0131s\\u0131mlar\\u0131da tam olarak **5. ve 7.** sat\\u0131rlarda yap\\u0131l\\u0131yor, yorum sat\\u0131rlar\\u0131n\\u0131 kullanarak kodlar\\u0131 ba\\u015ftan sona anlatay\\u0131m.\\r\\n\\r\\n--------\\r\\n\\r\\n```python\\r\\nclass DictToObject(): # s\\u0131n\\u0131f\\u0131m\\u0131z\\u0131n ismi DictToObject\\r\\n def __init__(self, d): # d ad\\u0131 ile bir parametre belirliyoruz.\\r\\n for key, value in d.items(): # yukar\\u0131da itemi anlatt\\u0131\\u011f\\u0131m k\\u0131s\\u0131m burada\\r\\n if isinstance(value, (list, tuple)): # isinstance ile gelen value list veya tuble ise,\\r\\n\\t\\t\\t\\t# yani [] veya () \\u015feklinde birden fazla de\\u011fer var ise\\r\\n setattr(self, key, [DictToObject(x) if isinstance(x, dict) else x for x in value])\\r\\n\\t\\t\\t # setattr kullanarak ilk parametresine yani nesne yazmam\\u0131z gereken yere self yaz\\u0131yoruz bu bulundu\\u011fumuz s\\u0131n\\u0131fa ekleme yapmas\\u0131n\\u0131 sa\\u011flayacakt\\u0131r. ikinci parametre dict'den gelen key bilgisi ve value k\\u0131sm\\u0131 ise \\u00fc\\u00e7\\u00fcnc\\u00fc parameter fakat buradaki olay \\u015fu gelen value list veya tuble oldu\\u011fu i\\u00e7in for i\\u00e7ine al\\u0131yoruz **for x in value** ve demi\\u015fki **if isinstance(x, dict) ** e\\u011fer for ile gelen veri dict ise tekrardan **DictToObject** s\\u0131n\\u0131f\\u0131m\\u0131za at\\u0131yoruz ve ayn\\u0131 \\u015feyler onun i\\u00e7in devam ediyor ve burada value yerine attr olarak s\\u0131n\\u0131f g\\u00f6ndermi\\u015f oluyoruz **else x** bu k\\u0131s\\u0131m ise e\\u011fer dict de\\u011fil ise direk for ile gelen de\\u011feri direk setattr ile class i\\u00e7ine i\\u015fle diyoruz.\\r\\n else:\\r\\n setattr(self, key, DictToObject(value) if isinstance(value, dict) else value)\\r\\n\\t\\t\\t #bu k\\u0131s\\u0131m ise yukarda e\\u011fer value dict veya tuble de\\u011fil ise buras\\u0131 \\u00e7al\\u0131\\u015f\\u0131r.\\r\\n\\t\\t\\t # burda da gelen de\\u011fi\\u015fken *if isinstance(value, dict)* dict ise **DictToObject** tekrandan s\\u0131n\\u0131f\\u0131m\\u0131za geri g\\u00f6nderileri ve i\\u015flemler tekrar eder ve burada yine attr olarak s\\u0131n\\u0131f g\\u00f6ndermi\\u015f oluyoruz, e\\u011fer dict de\\u011filsede *else value* direk value de\\u011ferini **setattr** ile s\\u0131n\\u0131fa i\\u015fler.\\r\\n```\\r\\n\\r\\nBiraz kar\\u0131\\u015f\\u0131k oldu, ama dikkatl\\u0131 inceler ve okursan\\u0131z anlayaca\\u011f\\u0131n\\u0131z\\u0131 tahmin ediyorum, bu kod ( s\\u0131n\\u0131f ) benim \\u00e7ok i\\u015fime yarayacak sizlerede anlatmak istedim.\\r\\n\\r\\n### Nas\\u0131l kullan\\u0131l\\u0131r ? \\r\\nKodun \\u00e7\\u0131kt\\u0131s\\u0131n\\u0131 a\\u00e7\\u0131kl\\u0131yorum, \\u00f6rnek ile anlatal\\u0131m.\\r\\n\\r\\n```python\\r\\n>>> d = {\\\"a\\\": \\\"b\\\", \\\"c\\\": {\\\"d\\\": \\\"e\\\"}, \\\"f\\\": [\\\"hi\\\", {\\\"foo\\\": \\\"bar\\\"}]}\\r\\n>>> x = DictToObject(d)\\r\\n>>> x.c.d\\r\\ne\\r\\n>>> x.f[1].foo #bu k\\u0131s\\u0131m nas\\u0131l oldu derseniz \\r\\n'bar'\\r\\n# \\\"f\\\": [\\\"hi\\\", {\\\"foo\\\": \\\"bar\\\"}] bu k\\u0131s\\u0131m list oldu\\u011fu i\\u00e7in ve i\\u00e7inde dict oldu\\u011fu i\\u00e7in yukar\\u0131da anlatt\\u0131\\u011f\\u0131m \\r\\n# attr olarak s\\u0131n\\u0131f g\\u00f6ndermi\\u015f oluyoruz dedi\\u011fim olaylar ger\\u00e7ekle\\u015fiyor. \\r\\n# yani bu \\u015fekilde setattr(self, key, DictToObject(value))\\r\\n# bu \\u015fekilde de\\u011fil setattr(self, key, value)\\r\\n\\r\\n>>> x.__dict__ # bu \\u015fekilde yaparak s\\u0131n\\u0131f i\\u00e7indeki dict leri yani nesneleri g\\u00f6rebilirsiniz.\\r\\n{'a': 'b', 'c': <__main__.DictToObject object at 0x0000025095AB45C0>, 'f': ['hi', <__main__.DictToObject object at 0x0000025095AB45F8>]}\\r\\n# burdan bak\\u0131n normalde x.a yap\\u0131nca b c\\u0131kt\\u0131s\\u0131n\\u0131 al\\u0131r\\u0131z fakat x.c yap\\u0131nca bize yine s\\u0131n\\u0131f d\\u00f6nd\\u00fcrecektir yada \\r\\n# x.f yap\\u0131nca bize bir liste d\\u00f6nd\\u00fcrecektir bu listenin 1. eleman\\u0131 ise yine bir s\\u0131n\\u0131ft\\u0131r.\\r\\n```\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "sozluk-veri-tipini-python-nesnesine-donusturme",
"title": "Sözlük veri tipini python nesnesine dönüştürme"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T01:58:03",
"trx_id": "cda0552a6e56ee51d4b91f7d435137eec8390203",
"trx_in_block": 24,
"virtual_op": false
}2019/05/20 01:56:15
2019/05/20 01:56:15
| author | hakancelik |
| body | <center> <a href="https://www.coogger.com/@hakancelik/4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri"> <img alt="Blockcoinex" src="https://www.coogger.com/media/images/Blockcoinex.jpg"> </a> <a href="https://www.coogger.com/@hakancelik/4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri">Read this content on coogger</a> </center> |
| json metadata | {"format": "markdown", "tags": ["coogger", "tr", "exchange", "blockcoinex"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "## Blockcoinex nedir?\r\n\r\n**Blockcoinex** k\u0131sacas\u0131 exchange sitelerinin verilerini kullanarak, coin de\u011fi\u015f toku\u015fu yaparsan\u0131z kesintiler ve al\u0131nan komisyonlar dahilinde elinize ne kadar coin veya para ge\u00e7ece\u011fini h\u0131zl\u0131 bir \u015fekilde g\u00f6rmenizi sa\u011flayacak bir python k\u00fct\u00fcphanesidir.\r\n\r\n\u015euan k\u00fct\u00fcphanede **blocktrades** ve **koinim** sitelerinin verileri var yani bu iki site aras\u0131nda de\u011fi\u015f toku\u015f yapacaksan\u0131z sizin i\u015finize yarayabilir, yak\u0131n zamanda binance gibi di\u011fer siteleri de eklemeyi d\u00fc\u015f\u00fcn\u00fcyorum.\r\n\r\nK\u00fct\u00fcphane kullan\u0131m a\u015famas\u0131na geldi\u011finde hemen bir bot yapt\u0131m, botun g\u00f6revi ise \u015fu bilgisayar a\u00e7\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015f, 1000 t\u00fcrk paras\u0131 ile koinim \u00fczerinden ka\u00e7 tane bitcoin geldi\u011fini bul, bulunan bitcoin'i blocktrades arac\u0131l\u0131\u011f\u0131 ile bak bakal\u0131m ka\u00e7 tane steem geliyor ve bu verileri veri taban\u0131na kay\u0131t et, daha sonra 1000 t\u00fcrk paras\u0131 kazanmak i\u00e7in bak bakal\u0131m ka\u00e7 tane steem'i blocktrades ile bitcoin'e \u00e7evirmem daha sonra koinim.com'dan satmam gerekiyor ve bu verileri de kay\u0131t et sonra ayn\u0131 durumlar\u0131 litecoin i\u00e7in tekrarla hepsi bu kadar.\r\n\r\nSizlere botun 4 g\u00fcnl\u00fck verilerini g\u00f6sterece\u011fim, ve bundan sonra al sat yapmadan \u00f6nce burdaki verilere de bakarak hareket etmeyi planl\u0131yorum.\r\n\r\n#### TRY > BTC > STEEM\r\n> 1000 T\u00fcrk liras\u0131 ile koinim \u00fczerinden bitcoin al > al\u0131nan bitcoin ile \r\nblocktrades \u00fczerinden steem al.\r\n\r\n> \u0130lk veri ; 1000 t\u00fcrk liras\u0131 ile 0.024408163 tane bitcoin al\u0131nabiliyor \r\n> 0.024408163 bu kadar bitcoin'i blocktrades ile satarsan 132.498 steem yap\u0131yor.\r\n> K\u0131sacas\u0131 1000 tl ile 132.498 steem al\u0131nabiliyordu 4. g\u00fcn \u00f6nce \u015fimdi ise 138.003 tane al\u0131nabiliyor..\r\n\r\n<center>  </center>\r\n\r\n#### STEEM > BTC > TRY\r\n> \u0130lk veri ;\r\n> 151.827 steem ile blocktrades den 0.025754476 btc al\u0131nabiliyor, bunu koinim'e atar ve satarsan 1000 t\u00fcrk liras\u0131 alabiliyorsun.\r\n\r\n<center>  </center>\r\n\r\n#### TRY > LTC > STEEM\r\n<center>  </center>\r\n\r\n#### STEEM > LTC > TRY\r\n<center>  </center>\r\n\r\n<br>\r\n\r\nEn karl\u0131 durumlar yukar\u0131da ki verilerde yeterince a\u00e7\u0131k bir \u015fekilde g\u00f6r\u00fcn\u00fcyor.\r\n\r\n<center>**Okudu\u011funuz i\u00e7in te\u015fekk\u00fcrler**</center>"}} |
| parent author | |
| parent permlink | coogger |
| permlink | 4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri |
| title | 4 günlük Try Bitcoin Steem - Steem Try Bitcoin / Try Litecoin Steem - Steem Litecoin Try Değişimleri |
| Transaction Info | Block #33060192/Trx df86ad66d1a04fda7ff99a3120d225575bc8eeea |
View Raw JSON Data
{
"block": 33060192,
"op": [
"comment",
{
"author": "hakancelik",
"body": "<center>\n\n<a href=\"https://www.coogger.com/@hakancelik/4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri\">\n\n\n <img alt=\"Blockcoinex\" src=\"https://www.coogger.com/media/images/Blockcoinex.jpg\">\n\n</a>\n\n<a href=\"https://www.coogger.com/@hakancelik/4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri\">Read this content on coogger</a>\n\n</center>\n",
"json_metadata": "{\"format\": \"markdown\", \"tags\": [\"coogger\", \"tr\", \"exchange\", \"blockcoinex\"], \"app\": \"coogger/1.4.1\", \"ecosystem\": {\"version\": \"1.4.1\", \"body\": \"## Blockcoinex nedir?\\r\\n\\r\\n**Blockcoinex** k\\u0131sacas\\u0131 exchange sitelerinin verilerini kullanarak, coin de\\u011fi\\u015f toku\\u015fu yaparsan\\u0131z kesintiler ve al\\u0131nan komisyonlar dahilinde elinize ne kadar coin veya para ge\\u00e7ece\\u011fini h\\u0131zl\\u0131 bir \\u015fekilde g\\u00f6rmenizi sa\\u011flayacak bir python k\\u00fct\\u00fcphanesidir.\\r\\n\\r\\n\\u015euan k\\u00fct\\u00fcphanede **blocktrades** ve **koinim** sitelerinin verileri var yani bu iki site aras\\u0131nda de\\u011fi\\u015f toku\\u015f yapacaksan\\u0131z sizin i\\u015finize yarayabilir, yak\\u0131n zamanda binance gibi di\\u011fer siteleri de eklemeyi d\\u00fc\\u015f\\u00fcn\\u00fcyorum.\\r\\n\\r\\nK\\u00fct\\u00fcphane kullan\\u0131m a\\u015famas\\u0131na geldi\\u011finde hemen bir bot yapt\\u0131m, botun g\\u00f6revi ise \\u015fu bilgisayar a\\u00e7\\u0131ld\\u0131\\u011f\\u0131nda \\u00e7al\\u0131\\u015f, 1000 t\\u00fcrk paras\\u0131 ile koinim \\u00fczerinden ka\\u00e7 tane bitcoin geldi\\u011fini bul, bulunan bitcoin'i blocktrades arac\\u0131l\\u0131\\u011f\\u0131 ile bak bakal\\u0131m ka\\u00e7 tane steem geliyor ve bu verileri veri taban\\u0131na kay\\u0131t et, daha sonra 1000 t\\u00fcrk paras\\u0131 kazanmak i\\u00e7in bak bakal\\u0131m ka\\u00e7 tane steem'i blocktrades ile bitcoin'e \\u00e7evirmem daha sonra koinim.com'dan satmam gerekiyor ve bu verileri de kay\\u0131t et sonra ayn\\u0131 durumlar\\u0131 litecoin i\\u00e7in tekrarla hepsi bu kadar.\\r\\n\\r\\nSizlere botun 4 g\\u00fcnl\\u00fck verilerini g\\u00f6sterece\\u011fim, ve bundan sonra al sat yapmadan \\u00f6nce burdaki verilere de bakarak hareket etmeyi planl\\u0131yorum.\\r\\n\\r\\n#### TRY > BTC > STEEM\\r\\n> 1000 T\\u00fcrk liras\\u0131 ile koinim \\u00fczerinden bitcoin al > al\\u0131nan bitcoin ile \\r\\nblocktrades \\u00fczerinden steem al.\\r\\n\\r\\n> \\u0130lk veri ; 1000 t\\u00fcrk liras\\u0131 ile 0.024408163 tane bitcoin al\\u0131nabiliyor \\r\\n> 0.024408163 bu kadar bitcoin'i blocktrades ile satarsan 132.498 steem yap\\u0131yor.\\r\\n> K\\u0131sacas\\u0131 1000 tl ile 132.498 steem al\\u0131nabiliyordu 4. g\\u00fcn \\u00f6nce \\u015fimdi ise 138.003 tane al\\u0131nabiliyor..\\r\\n\\r\\n<center>  </center>\\r\\n\\r\\n#### STEEM > BTC > TRY\\r\\n> \\u0130lk veri ;\\r\\n> 151.827 steem ile blocktrades den 0.025754476 btc al\\u0131nabiliyor, bunu koinim'e atar ve satarsan 1000 t\\u00fcrk liras\\u0131 alabiliyorsun.\\r\\n\\r\\n<center>  </center>\\r\\n\\r\\n#### TRY > LTC > STEEM\\r\\n<center>  </center>\\r\\n\\r\\n#### STEEM > LTC > TRY\\r\\n<center>  </center>\\r\\n\\r\\n<br>\\r\\n\\r\\nEn karl\\u0131 durumlar yukar\\u0131da ki verilerde yeterince a\\u00e7\\u0131k bir \\u015fekilde g\\u00f6r\\u00fcn\\u00fcyor.\\r\\n\\r\\n<center>**Okudu\\u011funuz i\\u00e7in te\\u015fekk\\u00fcrler**</center>\"}}",
"parent_author": "",
"parent_permlink": "coogger",
"permlink": "4-gunluk-try-bitcoin-steem-steen-try-bitcoin-try-litecoin-steem-steem-litecoin-try-degisimleri",
"title": "4 günlük Try Bitcoin Steem - Steem Try Bitcoin / Try Litecoin Steem - Steem Litecoin Try Değişimleri"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-20T01:56:15",
"trx_id": "df86ad66d1a04fda7ff99a3120d225575bc8eeea",
"trx_in_block": 30,
"virtual_op": false
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": 115723117977,
"last_update_time": 1564504452
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1516724898
},
"rc_account": {
"account": "hakancelik",
"rc_manabar": {
"current_mana": 11712514914,
"last_update_time": 1582199226
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": 11971825650,
"delegated_rc": 0,
"received_delegated_rc": 0
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"name":"Hakan ÇELİK","website":"https://www.coogger.com/@hakancelik96/","location":"world","profile_image":"https://resmim.net/f/lQLHFk.jpg","version":2} |
| JSON METADATA | |
| profile | {"name":"Hakan ÇELİK","about":"Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96","website":"https://www.coogger.com/@hakancelik96/","location":"world","cover_image":"http://www.coogger.com/static/logos/png/800.png","profile_image":"https://resmim.net/f/lQLHFk.jpg"} |
{
"posting_json_metadata": {
"profile": {
"name": "Hakan ÇELİK",
"website": "https://www.coogger.com/@hakancelik96/",
"location": "world",
"profile_image": "https://resmim.net/f/lQLHFk.jpg",
"version": 2
}
},
"json_metadata": {
"profile": {
"name": "Hakan ÇELİK",
"about": "Founder of coogger | Electrical and Electronics Engineer | software developer | https://github.com/hakancelik96",
"website": "https://www.coogger.com/@hakancelik96/",
"location": "world",
"cover_image": "http://www.coogger.com/static/logos/png/800.png",
"profile_image": "https://resmim.net/f/lQLHFk.jpg"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM5ZhZGNu1gnuQr4gVrt8CmomxaeG7VdSeDN6YzNgf5j6kDDYc4j1/1
Active
Single Signature
Public Keys
STM4yBU8UetiGzzmGNReFUJofki6zBmjoaY79zKrhprPoAGBSoN6k1/1
Posting
Single Signature
Public Keys
STM6WqeJkXJGtMBR1Lc5zt1PyvkmoSpqESCxPE7VzynEdAacAnzuw1/1
Memo
STM8kD92xTrZyuhbJnMX4HM5X1Jdzn8naNV9M6Yy7SZs94rbJYm3a
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5ZhZGNu1gnuQr4gVrt8CmomxaeG7VdSeDN6YzNgf5j6kDDYc4j",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM4yBU8UetiGzzmGNReFUJofki6zBmjoaY79zKrhprPoAGBSoN6k",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"busy.app",
1
],
[
"coogger.app",
1
],
[
"steemauto",
1
],
[
"steemgigs.app",
1
],
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM6WqeJkXJGtMBR1Lc5zt1PyvkmoSpqESCxPE7VzynEdAacAnzuw",
1
]
]
},
"memo": "STM8kD92xTrZyuhbJnMX4HM5X1Jdzn8naNV9M6Yy7SZs94rbJYm3a"
}Witness Votes
0 / 30
No active witness votes.
[]